深入浅出Mybatis(二)

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

同理现在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();
    }

输出:


小结:

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();
    }

插入成功后查看数据库




自增主键返回

    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>

再次执行插入:


这次控制台打印出的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的入门程序差不多结束了。




猜你喜欢

转载自blog.csdn.net/qq_21963133/article/details/79678354