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:以..结束
使用注解进行开发: