欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深入浅出Mybatis(二)

程序员文章站 2022-06-21 15:03:07
...

下面我们再来做一个测试,根据用户名模糊查询用户的记录。

同理现在userMapper.xml中添加一个sql语句

<select id="selectUserByName" parameterType="java.lang.String" resultType="com.beyond.mybatis.po.User">
        select * from user WHERE username like '%${value}%'
    </select>

由于查询的结果可能返回多条所以我们这里使用selectList进行查询。

/**
     *   @author:kevin
     *   @Description:   根据用户名模糊查询
     *   @Date:12:08 2018/3/24
     */
    @Test
    public void findUserByName() throws IOException {
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
        //创建会话
        SqlSession sqlSession = factory.openSession();
        //通过sqlsession操作数据库
        List user = sqlSession.selectList("test.selectUserByName","李");
        System.out.println(user);
        sqlSession.close();
    }

输出:

深入浅出Mybatis(二)

小结:

parameterType:

在映射文件中指定输入参数的类型

resultType:

在映射文件中指定返回结果的类型。

#{}和${}的区别

#{}表示一个占位符,#{}接收简单类型的时候里面可以是任意参数#{value},#{id}等等,接收pojo对象值,通过OGNL读取队形中的属性值。

${}表示一个拼接符号,会引起sql注入,所以不建议使用。${}接收简单类型的时候里面只能是value,${value}.

selectOne查询单条记录。

selectList查询多条记录。


添加用户信息。

<!-- 添加用户
     parameterType: 指定输入参数类型是pojo
     -->
    <insert id="insertUser" parameterType="com.beyond.mybatis.po.User">
        insert into user(id,username,birthday,sex,addr) VALUES (#{id},#{username},#{birthday},#{sex},#{addr})
    </insert>
/**
     *   @author:kevin
     *   @Description:   添加用户
     *   @Date:12:08 2018/3/24
     */
    @Test
    public void insertUser() throws IOException {
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
        //创建会话
        SqlSession sqlSession = factory.openSession();
        //通过sqlsession操作数据库
        //List user = sqlSession.selectList("test.selectUserByName","李");
        User user = new User();
        user.setUsername("王小川");
        user.setBirthday(new Date());
        user.setSex("1");
        user.setAddr("四川成都");
        sqlSession.insert("test.insertUser",user);
        //提交事务
        sqlSession.commit();   
        sqlSession.close();
    }

插入成功后查看数据库

深入浅出Mybatis(二)

深入浅出Mybatis(二)


自增主键返回

    mysql自增主键,执行insert提交自动生成一个自增主键。通过mysql函数获取到刚插入记录的自增主键:

LAST_INSERT_ID(),insert之后调用。

需要修改insertUser的定义如下:

<insert id="insertUser" parameterType="com.beyond.mybatis.po.User">
        <!--
        将插入数据的主键返回,返回到user对象中
         SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用于自增主键
         keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性
         order:SELECT LAST_INSERT_ID()执行顺序,相对于insert来说它的执行顺序
         -->
        <selectKey keyProperty="id" order="AFTER">
            SELECT LAST_INSERT_ID()
        </selectKey>
        insert into user(id,username,birthday,sex,addr) VALUES (#{id},#{username},#{birthday},#{sex},#{addr})
    </insert>

再次执行插入:

深入浅出Mybatis(二)

这次控制台打印出的id为 39。

非自增主键的返回:

如uuid主键的返回

需要将id类型修改为varchar,然后在insert之前获取uuid

<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
            SELECT uuid()
</selectKey>


删除用户:

<!-- 根据id删除 -->
    <delete id="deleteUserById" parameterType="int">
        DELETE FROM USER WHERE id=#{id}
    </delete>
/**
     *   @author:kevin
     *   @Description:   根据id删除用户信息
     *   @Date:12:08 2018/3/24
     */
    @Test
    public void deleteUser() throws IOException {
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
        //创建会话
        SqlSession sqlSession = factory.openSession();
        //通过sqlsession操作数据库
        sqlSession.delete("test.deleteUserById",39);
        //提交事务
        sqlSession.commit();
        sqlSession.close();
    }

更新用户:

<!-- 更新用户 -->
    <update id="updateUser" parameterType="com.beyond.mybatis.po.User">
        UPDATE USER SET username=#{username},birthday=#{birthday},sex=#{sex} WHERE id=#{id}
    </update>
/**
     *   @author:kevin
     *   @Description:   更新用户
     *   @Date:12:08 2018/3/24
     */
    @Test
    public void updateUser() throws IOException {
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
        //创建会话
        SqlSession sqlSession = factory.openSession();
        //通过sqlsession操作数据库
        //List user = sqlSession.selectList("test.selectUserByName","李");
        User user = new User();
        user.setId(38);
        user.setUsername("罗峰");
        user.setBirthday(new Date());
        user.setSex("1");
        user.setAddr("四川成都");
        sqlSession.update("test.updateUser",user);
        //提交事务
        sqlSession.commit();
        sqlSession.close();
    }
至此,Mybatis的入门程序差不多结束了。




相关标签: Mybatis