7、基于接口代理的方式来操作我们的数据库
Jdk的动态代理:可以为我们的接口产生实现类
1、接口的名字要与我们mapper.xml的名字保持一致(UserMapper.java è UserMapper.xml)
2.接口当中的方法名 要与我们的xml当中的sqlId保持一致
3、我们接口的位置要与我们xml存放的位置保持一致
4、xml当中的nameSpace一定要是我们接口的全限定名
5、xml一定要在SqlMapConfig.xml当中加载
第一步:定义接口
public interface UserMapper {
User getUserById(int id);
List<User> getUserByAddress(Stringaddress);
}
第二步:定义xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace的作用:用于区分多个xml文件-->
<mapper namespace="cn.itcast.mybatis.demo4.UserMapper">
<!--这里的id与我们接口当中的方法名保持一致-->
<select id="getUserById" parameterType="int" resultType="cn.itcast.mybatis.pojo.User">
select * from user where id = #{id}
</select>
<!--通过地址来进行模糊查询 -->
<select id="getUserByAddress" parameterType="string" resultType="cn.itcast.mybatis.pojo.User">
select * from user where address like '%${value}%'
</select>
</mapper>
第三步:sqlMapConfig.xml当中加载xml
<mappers>
<!-- <mapper resource="org/mybatis/example/BlogMapper.xml"/> -->
<mapperresource="mapper.xml"/>
<!--通过反射的知识,来加载我们的xml文件-->
<mapper class="cn.itcast.mybatis.demo4.UserMapper"/>
</mappers>
第四步:测试用例
private SqlSessionFactoryBuilderbuilder;
private SqlSessionFactorysqlSessionFactory;
private SqlSessionsqlSession;
@Before
public void init()throws IOException{
//第一步:获取我们的SqlSessionFactoryBuilder
builder =new SqlSessionFactoryBuilder();
//第二步:通过SqlSessionFactoryBuilder调用build来获取我们的SqlSessionFactory
sqlSessionFactory =builder.build(Resources.getResourceAsStream("SqlMapConfig.xml"));
//第三步:通过我们的SqlSessionFactory来获取我们的sqlSession
sqlSession =sqlSessionFactory.openSession();
}
/**
*通过id来进行查询用户
*@throws Exception
*/
@Test
public void getUserById()throws Exception {
//通过动态代理来为我们的接口产生一个实现类 , 可以理解为 new UserMapperImpl();
UserMappermapper =sqlSession.getMapper(UserMapper.class);
Useruser = mapper.getUserById(29);
System.out.println(user);
sqlSession.close();
}
/**
*通过地址来进行模糊查询
*@throws Exception
*/
@Test
public void getUserByAddress()throws Exception {
UserMappermapper =sqlSession.getMapper(UserMapper.class);
List<User>userList =mapper.getUserByAddress("内蒙");
for (Useruser :userList) {
System.out.println(user);
}
sqlSession.close();
}
基于接口代理方式实现数据库的添加与修改
接口当中的方法定义
public interface UserMapper {
User getUserById(int id);
List<User> getUserByAddress(Stringaddress);
void updateUser(User user);
void insertUser(User user);
}
Xml当中的sql语句定义
<!--更新的操作 -->
<update id="updateUser" parameterType="cn.itcast.mybatis.pojo.User" >
update user set address = #{address} where id = #{id}
</update>
<!--插入数据的操作 -->
<select id="insertUser" parameterType="cn.itcast.mybatis.pojo.User">
insert into user (username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
</select>
测试用例
/**
*数据库的修改操作
*@throws Exception
*/
@Test
public void updateUser()throws Exception {
UserMappermapper =sqlSession.getMapper(UserMapper.class);
Useruser =new User();
user.setId(28);
user.setAddress("山东");
mapper.updateUser(user);
sqlSession.commit();
sqlSession.close();
}
/**
*插入操作
*/
@Test
public void insertUser()throws Exception {
//通过动态代理,获取我们的UserMapper的实现类
UserMappermapper =sqlSession.getMapper(UserMapper.class);
Useruser =new User();
user.setAddress("湖南");
user.setBirthday(new Date());
user.setSex("0");
user.setUsername("凤姐");
mapper.insertUser(user);
sqlSession.commit();
sqlSession.close();
}