第1节
用传统mybatis开发
1)statementid写死,编译期发现不了错误
2)参数写死,编译期也没有校验过程
3)代码重复
mapper代理开发方式规则
第一步:配置包扫描,mappers里内容改为如下:
<mappers>
<!-- 整包扫描 -->
<package name="com.neuedu.day02.mapper"/>
</mappers>
第二步:
开发接口和xml
第一种 xml方式
满足以下规则:
1)接口名和xml文件名的前缀相同
2)xml的namespace=接口的完全限定名
3)xml的statementid=接口的方法名
4)xml的parametertype=接口方法名的参数类型
- xml的resulttype=接口方法名的返回值类型
例子如下:
接口UserMapper.java
public interface UserMapper {
//第一种mapper代理,保留xml
public User findUserById(int id);
}
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">
<mapper namespace="com.neuedu.day02.mapper.UserMapper">
<select id="findUserById" parameterType="int" resultType="user">
select * from t_user where user_id = #{user_id}
</select>
</mapper>
调用方式上采用mapper代理调用方式关键代码
UserMapper userMapper=session.getMapper(UserMapper.class);
User u=userMapper.findUserById(id);
完整的测试方法
@Override
public User findUserById(int id) throws IOException {
//第一步读取SqlMapConfig
//指定文件位置
//String resource="config/SqlMapConfig.xml";
//读取资源文件
//InputStream input=Resources.getResourceAsStream(resource);
//获取SqlSessionFactory
//SqlSessionFactory factory= new SqlSessionFactoryBuilder().build(input);
//获取SqlSession
SqlSession session=factory.openSession();
//执行查询
UserMapper userMapper=session.getMapper(UserMapper.class);
User u=userMapper.findUserById(id);
//关闭连接
session.close();
return u;
}
第2节
注解方式
第二种 注解方式
注意:相同方法名的注解方式和xml方式只能用一种,xml里不用写对应的statement
几个注解 @Select @Insert @Update @Delete
@Select("select * from t_user where user_id = #{user_id}")
public User selectUserById(int id);
@Insert("insert into t_user(user_id,user_name,user_pwd,user_email,user_idcard,user_power) values (null,#{user_name},#{user_pwd},#{user_email},#{user_idCard},#{user_power})")
public int insertUser(User user);
@Update("update t_user set user_name=#{user_name},user_pwd=#{user_pwd},user_email=#{user_email},user_idcard=#{user_idCard} where user_id=#{user_id}")
public int updateUser(User user);
@Delete("delete from t_user where user_id=#{user_id}")
public int deleteUser(int id);
@Test
public void testSelect() throws IOException{
IUserDao userDao=new UserDaoImpl(factory);
User u=userDao.selectUserById(1);
System.out.println(u.getUser_name());
}
@Test
public void testInsert() throws IOException{
IUserDao userDao=new UserDaoImpl(factory);
User user=new User();
user.setUser_name("chenhao");
user.setUser_pwd("654321");
user.setUser_power(0);
user.setUser_email("chenhao.newedu.com");
user.setUser_idCard("210101200006061234");
int count=userDao.insertUser(user);
System.out.println(count);
}
@Test
public void testUpdate() throws IOException{
IUserDao userDao=new UserDaoImpl(factory);
User user=new User();
user.setUser_id(8);
user.setUser_name("chenhao");
user.setUser_pwd("123456");
user.setUser_email("chenhao.newedu.com");
user.setUser_idCard("210101200006061234");
int count=userDao.updateUser(user);
System.out.println(count);
}
@Test
public void testDelete() throws IOException{
IUserDao userDao=new UserDaoImpl(factory);
int count=userDao.deleteUserById(9);
System.out.println(count);
}