本文中涉及的代码git地址为:开源中国Git代码
这一章主要在上一讲基于接口编程的基础上完成如下事情:
- 用 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、测试结果如下:
三、插入数据功能演示:
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、测试结果如下:
四、更新数据功能演示: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、查询数据库:
五、删除数据代码演示:
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();
}
}