第2章 mapper代理方式(2课时)

第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=接口方法名的参数类型

  1. 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);
   }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,742评论 0 4
  • MyBatis是一个优秀的持久层ORM框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL 本身...
    楼兰King阅读 686评论 0 5
  • 前言 MyBatis是一个优秀的持久层ORM框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL...
    AI乔治阅读 644评论 0 5
  • 语言,有时能一语中的,有时却又显得苍白无力… 有些时候,无需多言,一句话就足矣 有些话语,印在心底,一生终难忘却 ...
    SmilenceY阅读 41评论 0 1
  • “那个人样子好怪。” “我也看到了,他好像条狗啊!” 在落幕的余晖中,猴子扛着金箍棒渐行渐远,身后是紫霞和至尊宝 ...
    虬龙子阅读 300评论 0 1