Mybatis手动模式CRUD
一、先准备mybatis-config.xml 这个基础配置文件 配置文件可以使用上一文章中使用的配置文件,不用任何修改。
二 、准备 Mapper.xml文件
分别加入增删改查的代码 ,当然了 我们观察下面的代码可以发现 我们在修改和增加 传参数的时候 类型可写对象类型 当然可 也可以使用 map 类型对应数据库里面的字段 都可以完成修改以及 增加的操作。
<select id="findUserByid" resultType="com.zyh.pojo.User" parameterType="java.lang.Long">
select * from user where id = #{id}
</select>
<insert id="insertOneUserParamUser" parameterType="com.zyh.pojo.User">
INSERT
INTO user(username,password)
VALUES (#{username},#{password})
</insert>
<insert id="insertOneUserParamMap" parameterType="java.util.Map">
INSERT
INTO user(username,password)
VALUES (#{username},#{password})
</insert>
<delete id="deleteOneUserParamId" parameterType="java.lang.Long">
DELETE
FROM user
WHERE id=#{id}
</delete>
<update id="updateOneUserParamUser" parameterType="com.zyh.pojo.User">
UPDATE user
SET username =#{username},password=#{password}
WHERE id=#{id}
</update>
<update id="updateOneUserParamMap" parameterType="java.util.Map">
UPDATE user
SET username=#{username},password=#{password}
WHERE id=#{id}
</update>
我们现在可以观察一下 上一文章中的 入门程序 里面 有几行代码是冗余的
并且里面涉及到 sqlSessionFactory 所以我们可以使用单例涉及模式来处理上面的几行代码 提高性能。
image.png
首先 :我们可以先来复习一下单例模式:
大体上 ,单例可以分为 懒汉式和恶汉式。
第一种:饿汉模式
public class SingleTon {
private SingleTon(){
}
//实例化放在静态代码块里可提高程序的执行效率,但也可能更占用空间
private final static SingleTon instance = new SingleTon();
public static SingleTon getInstance(){
return instance;
}
}
第二种:懒汉模式
public class SingleTon {
private SingleTon(){}
private static instance = null;//new SingleTon();
public static synchronized SingleTon getInstance(){
if(instance == null)
instance = new SingleTon();
return instance;
}
}
我们可以使用 静态代码块以及 同步锁来优化上面的代码 比如懒汉式可以加入同步锁解决线程不安全情况 ,以及分别加入静态代码块提高执行效率 ,当然可能会导致内存占用率会很大。
/**
- 这个恶汉式
/
public class SqlSessionFactoryUtilSingleE {
private SqlSessionFactoryUtilSingleE(){
}
private static SqlSessionFactory sqlSessionFactory;
static {
try {
Reader reader = null;
reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
/* - 这个懒汉式
*/
public class SqlSessionFactoryUtilSingleL {
private SqlSessionFactoryUtilSingleL(){
}
private static SqlSessionFactory sqlSessionFactory=null;
static {
try {
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
getSessionFactory(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
public static synchronized void getSessionFactory( Reader reader){
if(sqlSessionFactory==null){
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
接下来就很简单了 ,增加的时候可以封装User对象,也可以将属性封装成Map 进行添加 都可以完成需求。
代码如下:
@Override
public void insertOneUserParamUser(User user) {
SqlSession sqlSession = SqlSessionFactoryUtilSingleL.getSqlSession();
sqlSession.insert("com.zyh.insertOneUserParamUser",user);
sqlSession.commit();
}
@Override
public void insertOneUserParamMap(Map map) {
SqlSession sqlSession = SqlSessionFactoryUtilSingleL.getSqlSession();
sqlSession.insert("com.zyh.insertOneUserParamMap",map);
sqlSession.commit();
}
@Override
public void deleteOneUserParamId(Long id) {
SqlSession sqlSession = SqlSessionFactoryUtilSingleL.getSqlSession();
sqlSession.insert("com.zyh.deleteOneUserParamId",id);
sqlSession.commit();
}
@Override
public void updateOneUserParamUser(User user) {
SqlSession sqlSession = SqlSessionFactoryUtilSingleE.getSqlSession();
sqlSession.insert("com.zyh.updateOneUserParamUser",user);
sqlSession.commit();
}
@Override
public void updateOneUserParamMap(Map map) {
SqlSession sqlSession = SqlSessionFactoryUtilSingleE.getSqlSession();
sqlSession.insert("com.zyh.updateOneUserParamMap",map);
sqlSession.commit();
}
DAO开发:
增删改需要提交事务sqlSession.commit();//在操作数据之后提交事务,查询不需要
从上面的代码发现 我们持久化层还是写了很多代码 ,比如 pojo 比如复杂的Mapper 等等 ....
下一篇文章我们将会 讲述一下 如何使用插件自动生成Mapper、dao、 pojo
我们只需要创建数据库表即可完成自动生成 是不是很期待呢?