MyBatis的Mapper 代理的增删改查操作(三)中

简介: MyBatis的Mapper 代理的增删改查操作(三)

三. 测试


三.一 根据id 查询单个对象


@Test
  public void getByIdTest(){
    SqlSession sqlSession=SqlSessionFactoryUtils.getSession();
    // 获取相应的 实体Mapper,  是接口的形式
    UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
    // 调用userMapper 接口中的方法  getById 
    User user=userMapper.getById(1);
    System.out.println(user);
  }


20190618193238325.png


三.二 查询全部的对象


@Test
  public void findAllTest(){
    SqlSession sqlSession=SqlSessionFactoryUtils.getSession();
    UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
    List<User> allList=userMapper.findAll();
    allList.forEach(n ->System.out.println(n));
  }


测试运行效果:


20190618193711586.png


只需要接口 即可,不需要相应的实现类。


四. Mapper 方式的匹配点


在利用Mapper 方式进行处理的时候,需要遵守以下的几个原则:


1.接口名称与类配置文件的名称保持一致。 一个是UserMapper.java, 一个是UserMapper.xml , 最好的命名方式为 类实体+Mapper 的形式。 (非必须)


2.xml 文件的命名空间为 接口的全限定名称, 这样可以方便的找到用的是哪一个接口。


<mapper namespace="com.yjl.mapper.UserMapper">


3.接口中的方法名称要与 xml配置文件中的id 保持一致。

如方法名称是 getById, 那么select 语句中的id 就是getById, 方法名称是insertUser, 那么insert 语句中的id 就是insertUser 。 可用于方法重载的情况。


4.参数类型一致. 接口中的方法的参数类型要与 statement 中的parameterType 的类型保持一致。


5.返回结果一致。 接口中的方法的返回值,要与statement 中的resultType 的类型保持一致,但并非一模一样。 接口的返回类型为List, resultType 的类型只是对象类型即可。


保持一致是为了自动生成代码。


User user = sqlSession.selectOne("test.findUserById", id);
sqlSession.insert("test.insertUser", user);


五. 插入操作 insert


五.一 普通插入


UserMapper.java 中接口:


public int insertUser(User user);


UserMapper.xml 中接口:


<!-- 插入语句,用别名的方法 user 来替换 com.yjl.pojo.User 类 -->
  <insert id="insertUser" parameterType="user"> 
    insert into user(name,age,sex,description) 
    values(#{name},#{age},#{sex} ,#{description}) 
  </insert>


测试方法,有自动提交,回滚的 异常处理的。


@Test
  public void insertTest(){
    SqlSession sqlSession=SqlSessionFactoryUtils.getSession();
    UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
    User user=new User();
    user.setName("老蝴蝶");
    user.setAge(25);
    user.setSex("男");
    user.setDescription("这是一个老蝴蝶");
    try{
      userMapper.insertUser(user);  //调用插入的方法,进行插入。
      //需要手动提交事务
      sqlSession.commit();
    }catch(Exception e){
      sqlSession.rollback();
    }finally{
      sqlSession.close();
    }
    System.out.println("输出信息:"+user);
  }


测试运行之后:


20190618194954275.png


数据库插入数据: (为3的那一条是 sqlSession 没有手动提交的脏数据)


20190618195106952.png


五.二 有id 值的处理


五.一 处理时,发现查询时,并没有查询出id 的值。 需要查询出id 的值信息。


<!-- 插入记录 ,获取id编号-->
  <insert id="insertUser" parameterType="user" keyProperty="id" useGeneratedKeys="true">
    insert into user(name,age,sex,description) values(#{name},#{age},#{sex}
    ,#{description})
  </insert>


测试方法不变, 日志输出为:


20190618195253241.png


有相应的id 信息。


五.三 数据库查询id


<!-- 数据库查询,获取id编号-->
  <insert id="insertUser" parameterType="com.yjl.pojo.User">
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
      select last_insert_id()
    </selectKey>
    insert into user(name,age,sex,description) values(#{name},#{age},#{sex}
    ,#{description})
  </insert>


输出日志为:


20190618195427873.png


五.四 uuid 插入


将id 的类型 改成String 类型,


20190618195648751.png


数据库中id 列的类型也改成varchar 类型


20190618195724126.png


xml sql语句为:


<!-- uuid插入,获取id编号-->
  <insert id="insertUser" parameterType="user">
    <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
      select uuid()
    </selectKey>
    <!-- 这个时候,sql 语句就要写id 了。 -->
    insert into user(id,name,age,sex,description) values(#{id},#{name},#{age},#{sex}
    ,#{description})
  </insert>


测试方法:


  @Test
  public void insertTest(){
    SqlSession sqlSession=SqlSessionFactoryUtils.getSession();
    UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
    User user=new User();
    user.setName("老蝴蝶uuid");
    user.setAge(25);
    user.setSex("男");
    user.setDescription("这是一个老蝴蝶uuid 测试");
    try{
      userMapper.insertUser(user);  //调用插入的方法,进行插入。
      //需要手动提交事务
      sqlSession.commit();
    }catch(Exception e){
      sqlSession.rollback();
    }finally{
      sqlSession.close();
    }
    System.out.println("输出信息:"+user);
  }


输出日志为:


20190618200426441.png


五.五 序列形式的插入


没有oracle 客户端,不进行验证了。


<!-- oracle 序列插入,获取id编号-->
  <insert id="insertUser" parameterType="com.yjl.pojo.User">
    <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.Integer">
      select 序列名.nextval() 
    </selectKey>
    <!-- 这个时候,sql 语句就要写id 了。 -->
    insert into user(id,name,age,sex,description) values(#{id},#{name},#{age},#{sex}
    ,#{description})
  </insert>


六. 修改操作 update


修改的接口 :


public int updateUser(User user);


修改对应的xml sql语句:


<update id="updateUser" parameterType="user">
    update user set name=#{name},sex=#{sex},age=#{age},description=#{description}
    where id=#{id}
  </update>



相关文章
|
4天前
|
Java 数据库连接 Maven
使用mybatis插件generator生成实体类,dao层和mapper映射
使用mybatis插件generator生成实体类,dao层和mapper映射
18 0
|
1月前
|
存储 Java 数据库连接
MyBatis-Plus 基础操作指南:实现高效的增删改查
MyBatis-Plus 基础操作指南:实现高效的增删改查
36 0
|
1月前
|
关系型数据库 Java 数据库连接
MyBatis-Plus简介和入门操作
【1月更文挑战第5天】 一、MyBatis-Plus简介 二、 MyBatis-Plus操作 1、准备数据库脚本 2、准备boot工程 3、导入依赖 4、配置文件和启动类 5、功能编码 6、测试和使用
94 1
|
1月前
|
SQL Java 数据库连接
初识MyBatis(搭建MyBatis、简单增删改查、核心配置文件讲解及获取参数值)
初识MyBatis(搭建MyBatis、简单增删改查、核心配置文件讲解及获取参数值)
|
1月前
|
SQL Java 数据库连接
用springboot mybatis写一个增删改查
用springboot mybatis写一个增删改查
17 0
|
25天前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
74 0
|
1天前
|
XML Java 数据库连接
【JavaEE进阶】 MyBatis使用XML实现增删改查
【JavaEE进阶】 MyBatis使用XML实现增删改查
|
1天前
|
Java 关系型数据库 数据库连接
【JavaEE进阶】 MyBatis使用注解实现增删改查
【JavaEE进阶】 MyBatis使用注解实现增删改查
|
25天前
|
SQL Java 数据库连接
MyBatis的多表操作
MyBatis的多表操作
12 0
|
25天前
|
Java 数据库连接 API
MyBatis入门操作
MyBatis入门操作
7 0