mybatis学习记录------2

一  单条记录查询

上篇博客的例子便是单条记录查询

二 多条记录查询

1 在映射文件中加入如下sql查询,${}:表示拼接sql串,将接收到的参数不加任何修饰拼接在sql中,${value}:接收输入参数的内容,如果传入类型是简单类型,${}中只能使用value。

<!--根据名称查找记录,可能返回多条记录
     resultType:指定就是单条记录所映射的java对象类型
     ${}:表示拼接sql串,将接收到的参数不加任何修饰拼接在sql中。
     使用${}拼接sql,容易引起sql注入
     ${value}:接收输入参数的内容,如果传入类型是简单类型,${}中只能使用value
      -->
     <select id="findUserByName" parameterType="String" resultType="pers.czs.mybatis.po.User">
         select * from user where username like ‘%${value}%‘
     </select>

2 在测试代码中加入如下执行代码,由于查询可能出现多条,因此应该使用list集合存放selectList查询出来的多条记录

@Test
    public void findUserByNameTest() throws IOException {
        //Mybatis配置文件
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂,传入配置文件信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过工厂得到SqlSession会话
        SqlSession sqlSession = sqlSessionFactory.openSession();

        List<User> list = sqlSession.selectList("test.findUserByName", "小明");
        System.out.println(list);
        sqlSession.close();
    }

3 运行结果

三 添加用户(insert)

1 在映射文件中加入相应的代码:其中parameterType:指定输入参数类型是pojo,无返回值,若主键是自增的,则可以不写主键,mysql会自动分配,我这里主键是ID,是自增的,故没写出来

<!--添加用户
         parameterType:指定输入参数类型是pojo
         #{}中指定pojo属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象属性值
         若主键是自增的,则可以不写主键,mysql会自动分配,我这里主键是ID,是自增的,故没写出来
      -->
     <insert id="insertUser" parameterType="pers.czs.mybatis.po.User">
         insert into user (username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
     </insert>

2 测试代码 此处记得使用sqlSession进行commit

@Test
    public void insertUserTest() throws IOException {
        //Mybatis配置文件
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂,传入配置文件信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过工厂得到SqlSession会话
        SqlSession sqlSession = sqlSessionFactory.openSession();

        User user = new User();
        user.setAddress("福建福州");
        user.setBirthday(new Date());
        user.setSex("男");
        user.setUsername("零零七");
        sqlSession.insert("test.insertUser", user);

        //提交
        sqlSession.commit();
        sqlSession.close();
    }

3 测试结果

四 添加用户--主键返回

1 自增主键返回

修改上述插入用户的映射文件代码,last_insert_id(),得到刚刚insert进去记录的主键值,只适用自增主键,keyProperty:将查询到的主键设置到parameterType指定的对象的特定属性中,resultType:指定select last_insert_id()的结果类型

<insert id="insertUser" parameterType="pers.czs.mybatis.po.User">
         <!--将插入数据的主键返回,返回到user对象中
         last_insert_id():得到刚刚insert进去记录的主键值,只适用自增主键
         keyProperty:将查询到的主键设置到parameterType指定的对象的特定属性中
         resultType:指定select last_insert_id()的结果类型
          -->
         <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
             select last_insert_id()
         </selectKey>
         insert into user (username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
     </insert>

2 在测试代码中加入输出id的语句

@Test
    public void insertUserTest() throws IOException {
        //Mybatis配置文件
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂,传入配置文件信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过工厂得到SqlSession会话
        SqlSession sqlSession = sqlSessionFactory.openSession();

        User user = new User();
        user.setAddress("福建福州");
        user.setBirthday(new Date());
        user.setSex("男");
        user.setUsername("零零七");
        sqlSession.insert("test.insertUser", user);

        System.out.println(user.getId());
        //提交
        sqlSession.commit();
        sqlSession.close();
    }

3 输出结果

五 非自增主键返回

1 使用mysql的uuid()函数生成主键,需要修改表中id字段类型为string,长度设置为35位

思路:

先通过uuid()查询到主键,将主键输入到sql语句中。

执行uuid()语句顺序相对于insert语句之前执行

将上面的映射文件代码改成如下:

<!--
          使用mysql的uuid()生成主键
          执行过程:
          首先通过uuid()得到主键,将主键设置到user对象的id属性中
          其次在执行insert时,从user对象取出id属性值
          -->
         <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
             select uuid()
         </selectKey>
         insert into user (id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})

原文地址:https://www.cnblogs.com/czsy/p/10354202.html

时间: 2024-07-31 11:21:49

mybatis学习记录------2的相关文章

MyBatis 学习记录5 MyBatis的二级缓存

主题 之前学习了一下MyBatis的一级缓存,主要涉及到BaseExecutor这个类. 现在准备学习记录下MyBatis二级缓存. 配置二级缓存与初始化发生的事情 首先二级缓存默认是不开启的,需要自己配置开启. 如上图,需要在configuration里去开启. 其次在需要用到二级缓存的Mapper的配置里做一些操作,如下图,增加一个cache节点 至此就可以在UserMapper上开启二级缓存了. 当MaBatis初始化的时候,需要解析各种XML配置来生成SQLSessionFactory,

MyBatis 学习记录3 MapperMethod类

主题 之前学习了一下MapperProxy的生产过程,自定义Mapper类的对象是通过动态代理生产的,调用自定义方法的时候实际上是调用了MapperMethod的execute方法:mapperMethod.execute(sqlSession, args);所以想再简单学习记录下MapperMethod类 组成 从上图可知,MapperMethod只有2个成员域,都是静态内部类,所以 MapperMethod ≈ SqlCommand + MethodSignature SqlCommand

Mybatis学习记录(三)--Mybatis配置文件详解

关于mybatis的配置文件,主要有两个,一个是SqlMapperConfig.xml文件一个是mapper.xml文件,分别对这两个进行深入全面学习. 一.SqlMapperConfig.xml文件 1.标签概况 在SqlMapperConfig.xml中主要有以下标签,其中环境集合environments和spring整合后废除不用.objectFactory和plugins不经常使用. properties(属性) settings(全局配置参数) typeAliases(类型别名) ty

Mybatis学习记录(四)--高级查询和缓存

这些都是连贯的学习笔记,所以有的地方因为之前都说过,所以也就没怎么写详细了,看不太明白的可以看看之前的笔记. 一.高级查询 高级查询主要是一对一查询,一对多查询,多对多查询 1.一对一查询 有用户和订单两个表,用户对订单是1对1查询.也就是订单中有一个外键是指向用户的. 先创建实体类: User.java public class User { private int id; private String username; private String password; private St

MyBatis 学习记录6 TypeHandler

主题 因为对MyBatis在JDBC数据和Java对象之间数据转化比较感兴趣,所以就记录并学习一下TypeHandler. 使用场景 如上图所示,观察下接口方法就能明白.TypeHandler主要用于JDBC数据与Java对象数据之间转化,比如更新数据库的时候可以设置java对象里的字段怎么映射到JDBC数据库支持的类型.或者查询数据的时候,返回的JDBC的数据怎么转化成Java对象中的属性. 这篇文章主要以一个select查询为例,学习下TypeHandler都被应用在了哪些阶段? 怎么被使用

MyBatis学习记录(一)

分三部分记录,MyBatis,MyBatis Spring和Mybatis Generator. 这一片记录MyBatis的一些学习心得. 基本概念 SqlSession :创建查询使用的是SqlSession,叫做Session,实际上也是维护了一个数据库的连接,内部通过Connection对象连接数据库. SqlSessionFactory:用来创建SqlSession,可以指定一些SqlSession的属性 SqlSessionFacotryBuilder:用来创建SqlSessionFa

Mybatis学习记录(六)----Mybatis的高级映射

作者:余家小子 1.一对多查询 1.1 需求 查询订单及订单明细的信息. 1.2 sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders.*, USER.username, USER.sex, USER.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id FR

mybatis学习记录

转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看中文的:http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html) 写在这个系列前面的话: 以前曾经用过ibat

Mybatis学习记录(二)--Mybatis开发DAO方式

mybatis开发dao的方法通常用两种,一种是传统DAO的方法,一种是基于mapper代理的方法,下面学习这两种开发模式. 写dao之前应该要对SqlSession有一个更加细致的了解 一.mybatis的SqlSession使用范围 SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder了,因为SqlSession是通过SqlSessionFactory生产