之前已经写过查询的具体使用,所以这里就不再赘述。
封装SQLSession的工具类
package com.xl.util;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisTool {
static SqlSessionFactory factory = null;
static{
try {
//1,读取配置文件,将数据放入输入流中
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//2,创建SqlSessionFactory对象,为了生成SqlSession对象
factory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 打开连接
* @return
*/
public static SqlSession getSession() {
return factory.openSession();
}
/**
* 关闭连接
* @param session
*/
public static void closeSession(SqlSession session) {
if(session!=null){
session.close();
}
}
}
添加操作
1,在mapper
里面定义对应方法
/**
* 添加一个用户
* @param user
* @return
*/
int addUser(User user);
2,编写对应的映射文件(xml文件)
<!-- 添加一个用户 增删改默认返回int,所以不需要resultType -->
<insert id="addUser" parameterType="com.xl.pojo.User">
INSERT INTO `user` VALUES(NULL,#{loginName},#{loginPwd},#{userName},#{sex},#{bornDate})
</insert>
3,对应的调用
SqlSession session = MybatisTool.getSession();
User u = new User();
u.setLoginName("li");
u.setLoginPwd("si");
u.setUserName("李思");
u.setSex("男");
u.setBornDate("2000-1-1");
int con = session.getMapper(UserMapper.class).addUser(u);
if(con!=0) {
System.out.println("添加成功");
}
//在mybatis里面默认就是开启了事务的,做查询的时候没有影响,但是做添加、修改、删除这类写的操作时,必须提交事务
session.commit();
MybatisTool.closeSession(session);
修改操作
1,在mapper
里面定义对应方法
/**
* 修改一个用户,这里就先简单修改一个登录名
* @param user
* @return
*/
int update(User user);
2,编写对应的映射文件(xml文件)
<!-- 修改一个用户的登录名 -->
<update id="update" parameterType="com.xl.pojo.User">
UPDATE `user` SET loginName = #{loginName} WHERE userId = #{userId}
</update>
3,对应的调用
SqlSession session = MybatisTool.getSession();
User u = new User();
u.setLoginName("haha");
u.setUserId(1);
int con = session.getMapper(UserMapper.class).update(u);
if(con!=0) {
System.out.println("修改成功");
}
session.commit();
MybatisTool.closeSession(session);
删除操作
1,在mapper
里面定义对应方法
/**
* 删除一个用户
* @param userId
* @return
*/
int delUser(Integer userId);
2,编写对应的映射文件(xml文件)
<!-- 根据id删除一个用户 -->
<delete id="delUser" parameterType="java.lang.Integer">
DELETE FROM `user` WHERE userId = #{userId}
</delete>
3,对应的调用
SqlSession session = MybatisTool.getSession();
int con = session.getMapper(UserMapper.class).delUser(11);
if(con!=0) {
System.out.println("删除成功");
}
session.commit();
MybatisTool.closeSession(session);
Mybatis
执行增删改需要注意的地方:
- 都不需要写resultType,返回类型默认是影响行数
- 占位符:
#{实体类的属性}
- 增删改都需要提交事务
SqlSession.commit()
,否则数据库不会更新。