这一章主要在上一讲基于接口编程的基础上完成如下事情:
  • 用 mybatis 查询数据,包括列表
  • 用 mybatis 增加数据
  • 用 mybatis 更新数据.
  • 用 mybatis 删除数据.

一、首先插入几条新数据:表结构见之前的文章

Insert INTO `user` VALUES ('2', '张三', '26', '上海');
Insert INTO `user` VALUES ('3', '李四', '30', '北京');
Insert INTO `user` VALUES ('4', '李白', '30', '南京');
Insert INTO `user` VALUES ('5', '卡洛斯', '30', '广州');

二、查询列表功能:

1、修改User2.xml文件:

<!-- 为了返回list 类型而定义的returnMap -->
    <resultMap type="User" id="resultListUser">
        <id column="id" property="id" />
        <result column="userName" property="userName" />
        <result column="userAge" property="userAge" />
        <result column="userAddress" property="userAddress" />
    </resultMap>

    <!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->
    <select id="selectUsers" parameterType="string" resultMap="resultListUser">
        select * from user where userName like CONCAT( #{userName},'%' )
    </select>

2、在com/nextflower/Study/dao/UserDao.java中添加以下方法声明:

public List<User> selectUsers(String userName);
3、测试代码如下:
@Test
public void testGetList() {
    String userName = "李";
    SqlSession session = sqlSessionFactory.openSession();
    try {
        UserDao userDao=session.getMapper(UserDao.class);
        List<User> users = userDao.selectUsers(userName);
        for(User user:users){
            System.out.println(user.getId()+":"+user.getUserName()+":"+user.getUserAddress());
        }

    } finally {
        session.close();
    }
}

4、测试结果如下:

java mybatis 字段自增 mybatis增加数据_User


三、插入数据功能演示:

1、在com/nextflower/Study/dao/UserDao.java中添加以下方法声明:

public void addUser(User user);

2、修改User2.xml文件:

<!--执行增加操作的SQL语句。id和parameterType分别与IUserOperation接口中的addUser方法的名字和参数类型一致。
以#{userName}的形式引用User参数的name属性,MyBatis将使用反射读取User参数的此属性。
#{userName}中userName大小写敏感。
引用其他的gender等属性与此一致。
seGeneratedKeys设置为"true"表明要MyBatis获取由数据库自动生成的主键;
keyProperty="id"指定把获取到的主键值注入到Student的id属性-->
<insert id="addUser" parameterType="User"
        useGeneratedKeys="true" keyProperty="id">
    insert into user(userName,userAge,userAddress)
    values(#{userName},#{userAge},#{userAddress})
</insert>

3、测试代码如下:

@Test
public void testAddUser() {
    User user=new User();
    user.setUserAddress("人民广场");
    user.setUserName("飞鸟");
    user.setUserAge("36");
    SqlSession session = sqlSessionFactory.openSession();
    try {
        UserDao userDao = session.getMapper(UserDao.class);
        userDao.addUser(user);
        session.commit();
        System.out.println("当前增加的用户 id为:"+user.getId());
    } finally {
        session.close();
    }
}

4、测试结果如下:

java mybatis 字段自增 mybatis增加数据_java_02


四、更新数据功能演示:Update

1、在com/nextflower/Study/dao/UserDao.java中添加以下方法声明:

public void updateUser(User user);

2、修改User2.xml文件:

<update id="updateUser" parameterType="User" >
    update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id}
</update>

3、测试代码如下:

@Test
public void updateUser() {
    //先得到用户,然后修改,提交。
    SqlSession session = sqlSessionFactory.openSession();
    try {
        UserDao userDao = session.getMapper(UserDao.class);
        User user = userDao.selectUserByID(4);
        user.setUserAddress("原来是魔都的浦东创新园区");
        userDao.updateUser(user);
        session.commit();
    } finally {
        session.close();
    }
}

4、查询数据库:

java mybatis 字段自增 mybatis增加数据_mybatis_03


五、删除数据代码演示:

1、在com/nextflower/Study/dao/UserDao.java中添加以下方法声明:

public void deleteUser(int id);

2、修改User2.xml配置文件:

<delete id="deleteUser" parameterType="int">
        delete from user where id=#{id}
</delete>

3、测试代码:

@Test
public void testDelete() {
    SqlSession session = sqlSessionFactory.openSession();
    try {
        UserDao userDao = session.getMapper(UserDao.class);
        userDao.deleteUser(7);
        session.commit();
    } finally {
        session.close();
    }
}