Mybatis

在Maven框架下,pom.xml导入mybatis依赖

   

org.mybatis

   

mybatis

   

3.5.5

还有其余junit/mysql/logback/lombok 等jar包

在JDK1.8下需要配置



属性配置

      maven.compiler.source  maven

编译源码环境

是jdk8

      maven.compiler.target  maven

目标代码运行环境jdk8


当前模块中 源码的编码集utf-8

-->

   

8

   

8

   

UTF-8


在java源代码文件夹的resouces文件夹中创建mybatis-config.xml 作为中心配置文件



   配置文件组成部分

       1.起别名  每次复制之后要进行检查

       2.连接池 四个信息 dataSource 每次复制之后要进行检查

       3.映射文件    关注包

-->


   

       



      environments环境们

              default选择哪一个环境

        environment环境  id代表不同的环境id

    -->

   


       


           transactionManager  事务管理器

              当前框架中的事务管理 谁来管理

                 type="JDBC"  使用JDBC中的事务管理操作(推荐)

                 MANAGED  自己管理事务

           -->

           


              mybatis自带连接池

                 type="POOLED"  你用连接

                 type="UNPOOLED"  不用连接池

                 type="JNDI"  连接池是一个服务器 以客户端身份连接 已过时。

           -->

           


                    driver  驱动 连接那种数据库就写哪种数据库的驱动

                    url连接哪个数据库

               -->

               

               

               

               







      映射文件

         咱们的sql在mybatis都是写在  XxxMapper.xml中的

          mappers

             里面的mapper就代表着 找到 咱们 的sql文件


    -->

    

       //代表扫描这个包下的所有文件


创建Brand类与tb_brand表

根据ORM思想,数据库的一张表对应java中的一个类.表中的一条数据,对应这个类的一个对象.表中的一个字段,对应对象的一个属性.


根据代理模式要求,创建BrandMapper接口与BrandMapper.xml 映射sql配置文件

[if !supportLists]1.    [endif]接口在源代码中的路径与xml在资源文件中的路径一致,这样编译后他们才会在同一文件夹下

com.xxx.mapper.BrandMapper.java

com\xxx\mapper\BrandMapper.xml在win下用\代替.

[if !vml]

[endif]

[if !supportLists]2.    [endif]BrandMapper.xml的名称空间需要是接口的全限定类名

[if !supportLists]3.    [endif]接口中的方法名需要与映射配置文件中的sql标签的id 一致.

并且方法的返回值与标签的resultType的属性值一致.因为在核心配置文件中起了别名,所以返回值类型可以简写为brand

接口中:

[if !vml]

[endif]

映射文件中:

[if !vml]

[endif]


测试类编写

测试要在test文件夹中编写,因为junit的依赖添加了范围

[if !vml]

[endif]


@Test

public void queryBrandById() throws IOException {

    InputStream is = Resources.getResourceAsStream("mybatis-config.xml");

    SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(is);

SqlSession sqlSession = sqlSessionFactory.openSession();

//

使用框架,我们只需要创建接口,框架会自动实现接口并提供给我们一个接口实现类对象mapper,通过mapper我们去调用接口中被实现的方法

    BrandMapper mapper =sqlSession.getMapper(BrandMapper.class);

    Brand brand =mapper.queryBrandById(2);

    System.out.println(brand);

//

增删改操作需要用sqlSession的commit来提交.

    sqlSession.close();

}


关于接口中的方法的参数定义与使用

1.如果是基本数据类型 或String类型作为参数,那么方法中参数可以不用起别名

BrandqueryBrandById(Integer id);

使用时直接${参数名}

        select * from tb_brand where id =#{id};

2.参数如果是一个对象 使用时可以直接用属性名

voidupdateBrand(Brand brand);

使用update语句时结合

传入的对象什么属性不为null.就会把这些属性取出使用作为update的值

[if !vml]

[endif]

3.参数如果是一个map集合,使用时需要使用map的key

List queryByCondition2(Map map);


       select * from tb_brand where status = #{status}

       and companyName like #{companyName}

       and brandName like #{brandName};

[if !supportLists]4.   [endif]如果传入的是集合.数组.而且我们需要遍历?

void deleteBrandsByIdArr(Integer[] ids);

        delete from tb_brand

        where id in


open="(" close=")" item="id"

separator=",">

            #{id}



[if !supportLists]5.    [endif]如果传入多个参数,需要在参数前加@Param(“别名”) 使用时引用${别名}

ListqueryByCondition(@Param("status")Integer status,@Param("brandName")StringbrandName,

 @Param("companyName")StringcompanyName);


        insert intotb_brand(brandName, companyName, ordered, description, status)

  values(#{brandName},#{companyName},#{ordered},#{description},#{status});

[if !supportLists]6.   [endif]如果插入数据时 ,需要回显主键 则需要在insert标签中加入属性

useGeneratedKeys="true"keyProperty="id"


如何解决类中属性名与表中字段名不匹配的问题

mybaits自动将数据库查到的数据进行封装成javabean,基于类中属性名与表中字段名完全一致的情况,这是自动映射

[if !supportLists]1.     [endif]若出现不一致情况,我们可以通过给数据库sql语句起别名的方法进行解决

[if !supportLists]2.     [endif]还可以通过手动映射进行解决

[if !supportLists]1)     [endif]sql配置文件中,将select标签属性改完resultMap= “xxx”

[if !supportLists]2)     [endif]增加<resultMap>标签,id=”xxx”;type=”全类名”

包裹<result property = “xxx” column= “xxx”>进行关系匹配

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容