博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一张图带你看懂原始dao与SQL动态代理开发的区别-Mybatis
阅读量:4697 次
发布时间:2019-06-09

本文共 10279 字,大约阅读时间需要 34 分钟。

//转载请注明出处:

1.项目结构区别:

2.开发区别:

注:其中原始dao开发的实现类UserDaoImpl 与动态代理开发的工具类UserService的第16行-第27行代码可以提炼出来,

       每个逻辑方法里都要注入这6行代码,会有些繁琐,因此需要提炼出来作为一个工厂类,对外提供Sqlsession会话。

3.工厂类:Factory

1 public class Factory { 2     private final static Class
lock = Factory.class; 3 private static SqlSessionFactory sqlSessionFactory = null; 4 private Factory() {} 5 6 public static SqlSessionFactory getSqlSessionFactory() { 7 synchronized (lock) { 8 if (sqlSessionFactory != null) { 9 return sqlSessionFactory;10 }11 //加载核心配置文件12 String resource = "mybatis-config.xml";13 InputStream inputStream;14 try {15 inputStream = Resources.getResourceAsStream(resource);16 //创建SqlsessionFactory工厂17 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);18 } catch (IOException e) {19 e.printStackTrace();20 return null;21 }22 //对外提供一个工厂23 return sqlSessionFactory;24 }25 }26 27 //对外提供一个Sqlsession会话28 public static SqlSession getSession() {29 if (sqlSessionFactory == null) {30 getSqlSessionFactory();31 }32 return sqlSessionFactory.openSession();33 }34 }

工厂类使用示例:

4.Mybatis的核心配置文件:mybatis-config.xml

1 
2 5 6
7
8 9
10
11
12
13
14
15
16
17
18
19
20
21
22 23
24
25
26
27
28
29
30
31
32

5.外部属性文件:jdbc

1 jdbc.driver=com.mysql.jdbc.Driver2 jdbc.url=jdbc:mysql://localhost:3306/crud?useSSL=false&serverTimezone=UTC&characterEncoding=utf-83 jdbc.username=root4 jdbc.password=123456

6.日志文件:log4j

1 ### 设置Logger输出级别和输出目的地 ### debug更详细,如果把debug改为info,则打印出的表数据遇到字符串就不显示,此外还有log4j.log文件 2 log4j.rootLogger=debug,stdout 3          4 ### 把日志信息输出到控制台 ### 5 log4j.appender.stdout=org.apache.log4j.ConsoleAppender  6 #log4j.appender.stdout.Target=System.err 7 log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout  8  9 ### 把日志信息输出到文件:log4j.log ###10 log4j.appender.logfile=org.apache.log4j.FileAppender 11 log4j.appender.logfile.File=log4j.log 12 log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 13 log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n14 15 ###显示SQL语句部分 ###16 #第一行:xml映射文件所在包17 log4j.logger.com.nreg.sqlMap=DEBUG18 log4j.logger.java.sql.Connection=DEBUG19 log4j.logger.java.sql.Statement=DEBUG20 log4j.logger.java.sql.PreparedStatement=DEBUG21 log4j.logger.java.sql.ResultSet=DEBUG

7.开发用crud模板:

1).接口:

1     //增 2     boolean addUser(User user); 3     //删 4     boolean deleteUserById(int id); 5     //改 6     boolean updateUserById(User user); 7     //查:按id查一个 8     User getUserById(int id); 9     //查:查所有10     List
getUser();

2).xml映射文件:

insert into user values(null,#{username},#{password})
delete from user where id = #{id}
update user set username = #{username},password = #{password} where id=#{id}

3).动态代理开发:UserService工具类:

1 public class UserService {  2       3     SqlSession sqlsession=null;  4     //增  5     public boolean addUser(User user) {  6         try {  7             //1.通过工厂获取会话  8             sqlsession= Factory.getSession();  9             //2.从会话中获取接口的代理对象 10             UserMapper userMapper=sqlsession.getMapper(UserMapper.class); 11             //3.通过代理对象操作数据库 12             userMapper.addUser(user); 13             //提交事务 14             sqlsession.commit(); 15             return true; 16         } catch (Exception e) { 17             //回滚 18             if(sqlsession !=null){ 19                 sqlsession.rollback(); 20             } 21             return false; 22         }finally{ 23             //关闭连接,释放资源 24             if(sqlsession!=null){ 25                 sqlsession.close(); 26             } 27         } 28     } 29      30     //删 31     public boolean deleteUserById(int id) { 32         try { 33             sqlsession= Factory.getSession(); 34             UserMapper userMapper=sqlsession.getMapper(UserMapper.class); 35             boolean tf=userMapper.deleteUserById(id); 36             sqlsession.commit(); 37             return tf; 38         } catch (Exception e) { 39             if(sqlsession!=null){ 40                 sqlsession.rollback(); 41             } 42             return false; 43         }finally{ 44             if(sqlsession!=null){ 45                 sqlsession.close(); 46             } 47         } 48     } 49      50     //改 51     public boolean updateUserById(User user) { 52  53         try { 54             sqlsession= Factory.getSession(); 55             UserMapper userMapper=sqlsession.getMapper(UserMapper.class); 56             userMapper.updateUserById(user); 57             sqlsession.commit(); 58             return true; 59         } catch (Exception e) { 60             if(sqlsession !=null){ 61                 sqlsession.rollback(); 62             } 63             return false; 64         }finally{ 65             if(sqlsession !=null){ 66                 sqlsession.close(); 67             } 68         } 69     } 70  71     //查:按id查一个 72     public User getUserById(int id) { 73  74         try { 75             sqlsession= Factory.getSession(); 76             UserMapper userMapper=sqlsession.getMapper(UserMapper.class); 77             User user = userMapper.getUserById(id); 78             return user; 79  80         } catch (Exception e) { 81             if(sqlsession!=null){ 82                 sqlsession.rollback(); 83             } 84             e.printStackTrace(); 85             return null; 86         }finally{ 87             if(sqlsession !=null){ 88                 sqlsession.close(); 89             } 90         } 91     } 92  93     //查:查所有 94     public List
getUser() { 95 96 try { 97 sqlsession = Factory.getSession(); 98 List
list = null; 99 UserMapper userMapper=sqlsession.getMapper(UserMapper.class);100 list = userMapper.getUser();101 return list;102 } catch (Exception e) {103 if(sqlsession!=null){104 sqlsession.rollback();105 }106 return null;107 }finally{108 if(sqlsession !=null){109 sqlsession.close();110 }111 }112 }113 }

 

4).原始dao开发:UserDaoImpl实现类:

1 public class UserDaoImpl implements UserDao {  2   3     SqlSession sqlsession = null;  4     //增:  5     @Override  6     public boolean addUser(User user) {  7         try {  8             //1.通过工厂获取会话  9             sqlsession = Factory.getSession(); 10             //2.通过会话操作数据库 11             sqlsession.insert("addUser", user); 12             //提交事务:增删改都需要提交事务 13             sqlsession.commit(); 14             return true; 15         } catch (Exception e) { 16             //回滚 17             if (sqlsession != null) { 18                 sqlsession.rollback(); 19             } 20             return false; 21         } finally { 22             //关闭连接,释放资源 23             if (sqlsession != null) { 24                 sqlsession.close(); 25             } 26         } 27     } 28  29     //删 30     @Override 31     public boolean deleteUserById(int id) { 32         try { 33             //1.通过工厂获取会话 34             sqlsession = Factory.getSession(); 35             //2.通过会话操作数据库 36             sqlsession.delete("deleteUserById",id); 37             //3.提交事务 38             sqlsession.commit(); 39             return true; 40         } catch (Exception e) { 41             if (sqlsession != null) { 42                 //回滚 43                 sqlsession.rollback(); 44             } 45             return false; 46         } finally { 47             if (sqlsession != null) { 48                 //关闭连接,释放资源 49                 sqlsession.close(); 50             } 51         } 52     } 53  54  55     //改: 56     @Override 57     public boolean updateUserById(User user) { 58         try { 59             sqlsession = Factory.getSession(); 60             sqlsession.update("updateUserById", user); 61             sqlsession.commit(); 62             return true; 63         } catch (Exception e) { 64             if (sqlsession != null) { 65                 sqlsession.rollback(); 66             } 67             return false; 68         } finally { 69             if (sqlsession != null) { 70                 sqlsession.close(); 71             } 72         } 73     } 74      75     //查:按id查 76     @Override 77     public User getUserById(int id) { 78         try { 79             sqlsession = Factory.getSession(); 80             User user = sqlsession.selectOne("getUserById",id); 81             return user; 82         } catch (Exception e) { 83             if (sqlsession != null) { 84                 sqlsession.rollback(); 85             } 86             return null; 87         } finally { 88             if (sqlsession != null) { 89                 sqlsession.close(); 90             } 91         } 92     } 93  94     //查:查所有 95     @Override 96     public List
getUser() { 97 try { 98 sqlsession = Factory.getSession(); 99 List
list = sqlsession.selectList("getUser");100 return list;101 } catch (Exception e) {102 if (sqlsession != null) {103 sqlsession.rollback();104 }105 return null;106 } finally {107 if (sqlsession != null) {108 sqlsession.close();109 }110 }111 }112 }

结。

转载于:https://www.cnblogs.com/nreg/p/11156167.html

你可能感兴趣的文章
C#结构体和类的区别
查看>>
模板 - 数论函数
查看>>
windows Api AlphaBlend的使用方法
查看>>
mysql主从延迟高的原因
查看>>
Leetcode 47. Permutations II
查看>>
DLL入门浅析【转】
查看>>
sql server:取当前时间前10分钟之内的数据 dateadd()
查看>>
python安装MySQLdb:出错Microsoft Visual C++ 9.0 is required
查看>>
BZOJ1027 [JSOI2007]合金 【计算几何 + floyd】
查看>>
【测绘图槽】03 测绘颂测绘人之歌(转载)
查看>>
LINUX下安装PHP(CGI模式)和NGINX[转]
查看>>
jQuery
查看>>
springboot定时器
查看>>
VS2017调试闪退之Chrome
查看>>
【Tip】如何让引用的dll随附的xml注释文档、pdb调试库等文件不出现在项目输出目录中...
查看>>
WPF中设置快捷键
查看>>
WebApi接口返回json,xml,text纯文本等
查看>>
C#/IOS/Android通用加密解密方法
查看>>
Web API 简单示例
查看>>
返璞归真 asp.net mvc (4) - View/ViewEngine
查看>>