MyBatis(二)

API:

  Resources:将核心配置文件加载到流中;

  SqlsessionFactoryBuilsder:用于构造SqlsessionFactory

  SqlSessionFactory:构建SqlSeeion对象

接口代理方法实现对Dao层的开发

  1.映射文件和dao层下的接口名一致   编译后在同一个文件夹中

  2.映射文件的namespace的名字与接口全限定名一致   

  3.接口定义的方法名参数类型返回值类型与xml中定义的一致     

Mapper mapper = SqlSeesion.getMapper();
mapper.select()

ResultMap:可以解决数据库的属性和实体类对应不上的问题。

 子标签中id时表中的主键id  其他列都是用result    column----property

Mybatis中多参数传递:

  1.索引    where uid = #{0}----0占位符  低版本多参数uid=#{arg0} and uname=#{arg1}

  2.map集合:uid=#{key1} and uname=#{key2}  key1.key2对应map中键

  3.注解:( @param(value=" 11 ") String uname)  uname=#{11}   sql语句{}中的值必 须与注解中的value值一样

  4.属性名  传入对象    uid=#{属性名} and uname=#{属性名}

      //顺序传值
           select * from user where uid = #{0} and uname =#{1}
        //通过注解 注解设置的value值与sql相对应
          select(@parm(value ="uid") int uid ,@parm(value ="uname") String uname )
        select * from user where uid =#{uid} and uname=#{uname}
        //通过map集合  
            Map map = new HashMap();
        map.put("key1",1)
        map.put("key2","李四")
        select * from user where uid={key1} and uname={key2} 
        //通过对象
           User user =new User();
        User.setId(1)
        User,setName("李四")
        select * from user where uid={uid} and uname={uname} 

 模糊查询:

 占位符: 1.    select * from user where uname like #{uname}

    测试selectByLike("%"+"王"+"%")

  2.  select * from user where uname like '%${value}%'(适用范围mysql  sqlserver)

    测试selectByLike("王")        不使用value接口顶顶方法时需要使用注解方式传值

  3.  select * from user where uname like concat(’%‘,#{uname},’%‘)

字符串拼接:4."%"#{uname}"%" 会有sql注入问题 

${}和#{}的区别:

#{}表示的是占位符, 相对安全  里面的名字随意

  可以实现preparedStatement向占位符赋值  自动进行java类型转换和jdbc类型转换  可以防止sql注入

  可以接收简单类型或pojo类型 如果paramenterType传递单个简单类型{}里可以实value或者其他名称

${}表示的是拼接sql串, 变量名不能随意给   否则必须给注解

Mybatis中主键的使用:

  

 sql片段:

  对公共的sql代码进行抽取

分页: 

  使用插件进行分页开发

引入jar包:

<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.3</version>
</dependency>

核心xml文件引入插件:

<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

编写代码:

  //设置当前页和页量

PageHelper.startPage(3,3);

  //实例化PageInfo对象传入数据库中的所有的数据集合

List<User>  users = userMapper.selectAll();
PageInfo<User> pageInfo =new PageInfo<>(users);

  //通过get方法可以获取分页相关的属性值

System.out.println(pageInfo.getPageNum());
        System.out.println(pageInfo.getPages());
        System.out.println(pageInfo.getSize());
        System.out.println(pageInfo.getTotal());
        System.out.println(pageInfo.isIsFirstPage());
        System.out.println(pageInfo.isIsLastPage());
        System.out.println(pageInfo.getList());

表与表之间的关系一对一:一对多:

多对多:


嵌套查询:
  把一对一 或者一对多的查询语句 分成两个语句来分别查询
  1.一对一:

<trim>标签
  <trim prefix="前缀" suffixOverrides="去除后缀">
</trim>

<foreach ></foreach>遍历
1.遍历集合
collection:遍历的对象 list array
open:开始
item:每次遍历的数据
close:以..结束
separtor:以..分割
close:以..结束



使用注解进行开发:
  








 



















原文地址:https://www.cnblogs.com/frhl/p/13564252.html