• Mybatis传统方式实现Dao层


    • 目录

      分层思想

      回顾调用流程

      传统方式实现Dao层

      功能的实现

      LOG4J的使用


    • 分层思想

    • 控制层(controller)
    • 业务层(service)
    • 持久层(dao)
    • 回顾调用流程

    • 首先是控制层调用业务层的功能,然后业务层再去调用持久层的功能
    • 很显然,持久层就是和数据库打交道的
    • 传统方式实现Dao层

    • dao层
    • service层
      1. package demo2.service;
      2. import demo1.bean.Student;
      3. import java.util.List;
      4. public interface StudentService {
      5. //查询全部
      6. public abstract List selectAll();
      7. //根据id查询
      8. public abstract Student selectById(Integer sid);
      9. //新增数据
      10. public abstract Integer insert(Student stu);
      11. //修改数据
      12. public abstract Integer update(Student stu);
      13. //删除数据
      14. public abstract Integer delete(Integer sid);
      15. }
      1. package demo2.service;
      2. import demo1.bean.Student;
      3. import demo2.dao.StudentMapper;
      4. import demo2.dao.StudentMapperImpl;
      5. import java.util.List;
      6. public class StudentServiceImpl implements StudentService{
      7. //创建持久层对象
      8. private StudentMapper mapper = new StudentMapperImpl();
      9. @Override
      10. public List selectAll() {
      11. return mapper.selectAll();
      12. }
      13. @Override
      14. public Student selectById(Integer sid) {
      15. return mapper.selectById(sid);
      16. }
      17. @Override
      18. public Integer insert(Student stu) {
      19. return mapper.insert(stu);
      20. }
      21. @Override
      22. public Integer update(Student stu) {
      23. return mapper.update(stu);
      24. }
      25. @Override
      26. public Integer delete(Integer sid) {
      27. return mapper.delete(sid);
      28. }
      29. }
    • controller层
      1. package demo2.controller;
      2. import demo1.bean.Student;
      3. import demo2.service.StudentService;
      4. import demo2.service.StudentServiceImpl;
      5. import org.junit.Test;
      6. import java.util.List;
      7. public class StudentController {
      8. //创建业务层对象
      9. private StudentService service = new StudentServiceImpl();
      10. //查询全部功能测试
      11. @Test
      12. public void selectAll(){
      13. List students = service.selectAll();
      14. for(Student stu : students){
      15. System.out.println(stu);
      16. }
      17. }
      18. //根据id查询功能测试
      19. @Test
      20. public void selectById(){
      21. Student stu = service.selectById(3);
      22. System.out.println(stu);
      23. }
      24. //新增功能测试
      25. @Test
      26. public void insert(){
      27. Student stu = new Student(4,"赵六",26);
      28. Integer result = service.insert(stu);
      29. System.out.println(result);
      30. }
      31. //修改功能测试
      32. @Test
      33. public void update(){
      34. Student stu = new Student(4,"倪炜豪",26);
      35. Integer result = service.update(stu);
      36. System.out.println(result);
      37. }
      38. //删除功能测试
      39. @Test
      40. public void delete(){
      41. Integer result = service.delete(4);
      42. System.out.println(result);
      43. }
      44. }
    • 功能的实现

    • dao层
      1. package demo2.dao;
      2. import demo1.bean.Student;
      3. import org.apache.ibatis.io.Resources;
      4. import org.apache.ibatis.session.SqlSession;
      5. import org.apache.ibatis.session.SqlSessionFactory;
      6. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
      7. import java.io.IOException;
      8. import java.io.InputStream;
      9. import java.util.List;
      10. //持久层实现类
      11. public class StudentMapperImpl implements StudentMapper{
      12. //查询全部
      13. @Override
      14. public List selectAll() {
      15. List list = null;
      16. SqlSession sqlSession = null;
      17. InputStream is = null;
      18. try{
      19. //1.加载核心配置文件
      20. is = Resources.getResourceAsStream("MybatisConfig.xml");
      21. //2.获取SqlSession工厂对象
      22. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
      23. //3.通过工厂对象获取SqlSession
      24. sqlSession= sqlSessionFactory.openSession(true);
      25. //4.执行映射配置文件中的sql语句,并接收结果
      26. list = sqlSession.selectList("StudentMapper.selectAll");
      27. }catch(Exception e){
      28. e.printStackTrace();
      29. }finally {
      30. //5.释放资源
      31. if(sqlSession!=null){
      32. sqlSession.close();
      33. }
      34. if(is!=null){
      35. try {
      36. is.close();
      37. } catch (IOException e) {
      38. e.printStackTrace();
      39. }
      40. }
      41. }
      42. //6.返回结果
      43. return list;
      44. }
      45. //根据id查询
      46. @Override
      47. public Student selectById(Integer sid) {
      48. Student stu = null;
      49. SqlSession sqlSession = null;
      50. InputStream is = null;
      51. try{
      52. //1.加载核心配置文件
      53. is = Resources.getResourceAsStream("MybatisConfig.xml");
      54. //2.获取SqlSession工厂对象
      55. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
      56. //3.通过工厂对象获取SqlSession
      57. sqlSession= sqlSessionFactory.openSession(true);
      58. //4.执行映射配置文件中的sql语句,并接收结果
      59. stu = sqlSession.selectOne("StudentMapper.selectById",sid);
      60. }catch(Exception e){
      61. e.printStackTrace();
      62. }finally {
      63. //5.释放资源
      64. if(sqlSession!=null){
      65. sqlSession.close();
      66. }
      67. if(is!=null){
      68. try {
      69. is.close();
      70. } catch (IOException e) {
      71. e.printStackTrace();
      72. }
      73. }
      74. }
      75. //6.返回结果
      76. return stu;
      77. }
      78. //新增数据
      79. @Override
      80. public Integer insert(Student stu) {
      81. Integer result = null;
      82. SqlSession sqlSession = null;
      83. InputStream is = null;
      84. try{
      85. //1.加载核心配置文件
      86. is = Resources.getResourceAsStream("MybatisConfig.xml");
      87. //2.获取SqlSession工厂对象
      88. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
      89. //3.通过工厂对象获取SqlSession
      90. sqlSession= sqlSessionFactory.openSession(true);
      91. //4.执行映射配置文件中的sql语句,并接收结果
      92. result = sqlSession.insert("StudentMapper.insert",stu);
      93. }catch(Exception e){
      94. e.printStackTrace();
      95. }finally {
      96. //5.释放资源
      97. if(sqlSession!=null){
      98. sqlSession.close();
      99. }
      100. if(is!=null){
      101. try {
      102. is.close();
      103. } catch (IOException e) {
      104. e.printStackTrace();
      105. }
      106. }
      107. }
      108. //6.返回结果
      109. return result;
      110. }
      111. //修改数据
      112. @Override
      113. public Integer update(Student stu) {
      114. Integer result = null;
      115. SqlSession sqlSession = null;
      116. InputStream is = null;
      117. try{
      118. //1.加载核心配置文件
      119. is = Resources.getResourceAsStream("MybatisConfig.xml");
      120. //2.获取SqlSession工厂对象
      121. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
      122. //3.通过工厂对象获取SqlSession
      123. sqlSession= sqlSessionFactory.openSession(true);
      124. //4.执行映射配置文件中的sql语句,并接收结果
      125. result = sqlSession.update("StudentMapper.update",stu);
      126. }catch(Exception e){
      127. e.printStackTrace();
      128. }finally {
      129. //5.释放资源
      130. if(sqlSession!=null){
      131. sqlSession.close();
      132. }
      133. if(is!=null){
      134. try {
      135. is.close();
      136. } catch (IOException e) {
      137. e.printStackTrace();
      138. }
      139. }
      140. }
      141. //6.返回结果
      142. return result;
      143. }
      144. //删除数据
      145. @Override
      146. public Integer delete(Integer sid) {
      147. Integer result = null;
      148. SqlSession sqlSession = null;
      149. InputStream is = null;
      150. try{
      151. //1.加载核心配置文件
      152. is = Resources.getResourceAsStream("MybatisConfig.xml");
      153. //2.获取SqlSession工厂对象
      154. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
      155. //3.通过工厂对象获取SqlSession
      156. sqlSession= sqlSessionFactory.openSession(true);
      157. //4.执行映射配置文件中的sql语句,并接收结果
      158. result = sqlSession.delete("StudentMapper.delete",sid);
      159. }catch(Exception e){
      160. e.printStackTrace();
      161. }finally {
      162. //5.释放资源
      163. if(sqlSession!=null){
      164. sqlSession.close();
      165. }
      166. if(is!=null){
      167. try {
      168. is.close();
      169. } catch (IOException e) {
      170. e.printStackTrace();
      171. }
      172. }
      173. }
      174. //6.返回结果
      175. return result;
      176. }
      177. }
    • LOG4J的使用

    • 为啥
    • 在日常开发过程中,排查问题时难免需要输出Mybatis真正执行的SQL语句,参数,结果等信息
    • 我们就可以借助LOG4J的功能来实现执行信息的输出
    • 使用步骤
    • 1.导入jar包
    • 2.修改核心配置文件
    • 3.在src下编写LOG4J配置文件
    • # Global logging configuration
      # ERROR WARN INFO DEBUG
      log4j.rootLogger=DEBUG, stdout
      # Console output.
      log4j.appender.stdout=org.apache.log4j.ConsoleAppender
      log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
      log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
      1. <settings>
      2. <setting name="logImpl" value="log4j"/>
      3. settings>
  • 相关阅读:
    谷歌Chrome 100正式版发布:启用全新图标,修复28个安全漏洞
    Android Canvas save()和restore()作用简析
    spring-boot-admin-starter-server监控springboot项目
    【三维重建】相移法+格雷码
    BPF:BCC工具 funccount 统计内核函数调用(内核函数、跟踪点USDT探针)认知
    电脑磁盘分区形式是什么?如何更改?
    200+ Java常见面试题总结《最少必要面试题》
    2023年9月11日
    手机NFC录入门禁数据,实现手机开门
    如何转换音频格式?建议收藏这几个方法
  • 原文地址:https://blog.csdn.net/weixin_59624686/article/details/126134174