Mybatis学习(二)
第二章 Mybatis原始方式的增删改查
前言
Mybatis的删除操作在第一章的时候已经介绍过了,本文重点介绍Mybatis原始方式的添加,修改和查询。
一、Mybatis增加
我们想要在数据库中插入用户user的姓名name和密码password,可以分别插入或者以键值对的形式插入。
配置文件如下:
<insert id="insertUser">
insert into user values(null , #{
name} , #{
password})
</insert>
- 第一种方法:
代码如下:
/**
* 添加用户
* */
public void insertUser(String name,String password) throws IOException {
SqlSession sqlSession = null;
try {
//获取sqlSession实例
sqlSession = new DBUtil().getSqlSession();
//调用sqlSession的方法
User user = new User(name,password);
int affectRows = sqlSession.insert("insertUser", user);
System.out.println("affectRows"+ affectRows);
//手动提交
sqlSession.commit();
} finally {
//关闭资源
assert sqlSession != null;
sqlSession.close();
}
}
添加成功:
值得注意的是,当SQL语句中需要传入两个参数时,#{ }内的值应该和对应类中的get/set方法名一致。如图,把#{name}修改:
这里再次执行主函数,会报出如下错误:
可以看到,报错信息显示:无法找到name111的get方法。我们可以理解为,程序在执行的过程中,会自动寻找#{ }内,值的get方法(#{name}找的是getName( )方法),并获取get方法的返回值。出现上述错误的主要原因就是,User类中没有getName111( )方法,产生异常,所以这里的参数,应该和get方法对应。同时mybatis3.5.6版本,如果#{ }中的内容和属性名对应,也能找到参数,实现插入。
- 第二种方法:
代码如下:
/**
* map添加用户
* */
public void insertUserMap(String name,String password) throws IOException {
SqlSession sqlSession = null;
try {
//获取sqlSession实例
sqlSession = new DBUtil().getSqlSession();
//调用sqlSession的方法
Map<String,Object> map = new HashMap<>();
map.put("name",name);
map.put("password",password);
int affectRows = sqlSession.insert("insertUser", map);
System.out.println("affectRows"+ affectRows);
//手动提交
sqlSession.commit();
} finally {
//关闭资源
assert sqlSession != null;
sqlSession.close();
}
}
添加成功:
二、Mybatis修改
我们想要在数据库中根据用户的id修改用户姓名name和密码password,也可以分别修改或者以键值对的形式修改。
配置文件如下:
<update id="updateUser">
update user set name = #{
name}, password = #{
password} where id = #{
id}
</update>
- 第一种方法:
代码如下:
public void updateUser(int id, String name, String password) throws IOException {
SqlSession sqlSession = null;
try {
sqlSession = new DBUtil().getSqlSession();
sqlSession.update("updateUser", new User(id, name, password));
sqlSession.commit();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
- 第二种方法:
代码如下:
public void updateUserMap(int id, String name, String password) throws IOException {
SqlSession sqlSession = null;
try {
sqlSession = new DBUtil().getSqlSession();
Map<String, Object> map = new HashMap<>();
map.put("id", id);
map.put("name", name);
map.put("password", password);
sqlSession.update("updateUser", map);
sqlSession.commit();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
三、Mybatis查询
查询方法可以实现的功能有很多,这里以单条查询和全部查询为例。
- 单条查询方法:
单条查询配置文件如下:
<select id="selectUserById" resultType="com.colin.bean.User">
select id, name, password from user where id = #{
fangshadouxing}
</select>
代码如下:
public void selectUserById(int id) throws IOException {
SqlSession sqlSession = null;
try {
// 1、获取sqlSession
sqlSession = new DBUtil().getSqlSession();
// 2、执行sqlSession
User user = sqlSession.selectOne("selectUserById", id);
System.out.println(user);
} finally {
if (sqlSession != null) {
// 3、关闭
sqlSession.close();
}
}
}
值得注意是的,如果是查询单条,那么resultType中的类型就是结果类型,如果查询到的是多条,那么resultType中的类型是集合中泛型的类型。
- 全部查询方法:
全部查询配置文件如下:
<select id="selectUserList" resultType="com.colin.bean.User">
select id, name, password from user
</select>
代码如下:
public void selectUserList() throws IOException {
SqlSession sqlSession = null;
try {
// 1、获取sqlSession
sqlSession = new DBUtil().getSqlSession();
// 2、执行sqlSession
List<User> list = sqlSession.selectList("selectUserList");
System.out.println(list);
} finally {
if (sqlSession != null) {
// 3、关闭
sqlSession.close();
}
}
}
总结
以上就是今天要讲的内容,Mybatis原始方式的增删改查在以后的学习中应用较少,但学习它能帮助我们完成从JDBC到后续映射接口的过渡,还是很有用的。