mybatis在使用代理dao的方式实现增删改查时做什么事呢?
只有两件事: 第一:创建代理对象
第二:在代理对象中调用selectList
我们读取配置文件用到了IO里面的Resources类,读出来的流也就是我们找到了我们要的这这些信息,交给了构建者,构建者使用工具类给我们构建了一个工厂对象,工厂里面的openSession()给我们提供了一个session方法,什么时候调用selectList查询所有的方法,创建Dao实现类增强的时候也就是创建代理对象的时候。
第一步 SqlSessionFactoryBuilder接收SqlMaoConfig.xml文件流,构建出SqlSessionFactory对象 // SqlSessionFactoryBuilder的build()方法里面有一个XMLConfigBuilder对象,他是做什么的呢?他是用来解析XML文件的一个构建者,通过他的parse()方法解析mybatis配置文件
第二步 SqlSessionFactory读取SqlMapConfig.xml中连接数据库和mapper映射信息。用来生产出真正操作数据库的SqlSession对象
第三步 SqlSession对象有两大作用:1、生成接口代理对象 2、定义通用增删改查方法
第四步 在代理对象中执行目标对象的方法
第五步 封装结果集
模糊查询操作:
@Test
public void testFindByName(){
List<User> users = userDao.findByName("%王%");
for(User user : users){
System.out.println(user);
}
}
xml写法
select *from user where username like #{name}
@Test
public void testFindByName(){
List<User> users = userDao.findByName("王");
for(User user : users){
System.out.println(user);
}
}
xml写法
select *from user where username like '%${value}%'
获取用户的总记录条数
select count(id) from user;
配置插入操作后,获取插入数据的id
<insert id="saveUser" parameterType="com.itheima.domain.User">
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday});
</insert>
keyProperty="id" //id的属性名称对应实体类的
keyColumn="id" //id的类名对应表的
resultType="int" //结果集类型
order="AFTER" //什么时候执行获取id的操作