05_ssm基础(二)之mybatis优化
06.mybatis优化之Mybatis工具类提取
优化原则(见官方文档):
mybatis工具类存放位置:
mybatis工具类代码:
1 package com.day01.ssm.mybatisDemo.utils; 2 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 8 import java.io.IOException; 9 import java.io.Reader; 10 11 /** 12 * 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html 13 * 疑问咨询wx:851298348 14 */ 15 public class MybatisUtil { 16 private static SqlSessionFactory sqlSessionFactory=null; 17 /** 18 * 静态代码块: 特点 无论多少的对象只执行一次 19 */ 20 static { 21 22 try { 23 //指定mybatis主配置文件地址 24 String resource = "myBatis-config.xml"; 25 //读取配置文件内容 26 Reader reader = Resources.getResourceAsReader(resource); 27 //从配置文件(通常是XML配置文件中)得到 sqlSessionfactory 28 sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 29 System.out.println("创建sqlSessionFactory完毕!"); 30 31 } catch (IOException e) { 32 e.printStackTrace(); 33 } 34 } 35 /** 36 * 获取SqlSessionFactory 37 * @return 38 */ 39 /** 40 * 被static 修饰后的方法,多了一种访问方式 可以用 类名.方法名 41 * @return 42 */ 43 public static SqlSessionFactory getSqlSessionFactory(){ 44 return sqlSessionFactory; 45 } 46 47 public static SqlSession getSqlSession(){ 48 SqlSession session = sqlSessionFactory.openSession(); 49 return session; 50 } 51 }
代码中使用
1 package com.day01.ssm.mybatisDemo.dao.impl; 2 3 import com.day01.ssm.mybatisDemo.dao.ITicketDao; 4 import com.day01.ssm.mybatisDemo.model.Ticket; 5 import com.day01.ssm.mybatisDemo.utils.MybatisUtil; 6 import org.apache.ibatis.session.SqlSession; 7 8 import java.util.List; 9 10 /** 11 * 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html 12 * 疑问咨询wx:851298348 13 */ 14 15 /** 16 * 使用mybatis完成CRUD 17 */ 18 public class TicketDao implements ITicketDao { 19 @Override 20 public void save(Ticket ticket) { 21 //以前 加 链 预 执 释 22 //现在 mybatis 23 try { 24 /* //指定mybatis主配置文件地址 25 String resource = "myBatis-config.xml"; 26 //读取配置文件内容 27 Reader reader = Resources.getResourceAsReader(resource); 28 //从配置文件(通常是XML配置文件中)得到 sqlSessionfactory 29 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);*/ 30 // MybatisUtil mybatisUtil = new MybatisUtil(); 31 32 // SqlSessionFactory sqlSessionFactory =MybatisUtil.getSqlSessionFactory(); 33 34 // 由sqlSessionfactory 产生 sqlSession(相当于Connection)。 35 // SqlSession sqlSession = sqlSessionFactory.openSession(); 36 37 SqlSession sqlSession = MybatisUtil.getSqlSession(); 38 39 //开启事物 40 sqlSession.insert("org.mybatis.example.BlogMapper.tt", ticket); 41 //提交事物 42 sqlSession.commit(); 43 sqlSession.close(); 44 45 } catch (Exception e) { 46 e.printStackTrace(); 47 } 48 49 50 } 51 52 @Override 53 public void deleteById(Integer id) { 54 //以前 加 链 预 执 释 55 //现在 mybatis 56 try { 57 /* //指定mybatis主配置文件地址 58 String resource = "myBatis-config.xml"; 59 //读取配置文件内容 60 Reader reader = Resources.getResourceAsReader(resource); 61 //从配置文件(通常是XML配置文件中)得到 sqlSessionfactory 62 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);*/ 63 // MybatisUtil mybatisUtil = new MybatisUtil(); 64 65 // SqlSessionFactory sqlSessionFactory =MybatisUtil.getSqlSessionFactory(); 66 // 由sqlSessionfactory 产生 sqlSession(相当于Connection)。 67 // SqlSession sqlSession = sqlSessionFactory.openSession(); 68 69 SqlSession sqlSession = MybatisUtil.getSqlSession(); 70 //开启事物 71 sqlSession.delete("org.mybatis.example.BlogMapper.dd", id); 72 //提交事物 73 sqlSession.commit(); 74 sqlSession.close(); 75 76 } catch (Exception e) { 77 e.printStackTrace(); 78 } 79 80 } 81 82 @Override 83 public void update(Ticket ticket) { 84 85 //以前 加 链 预 执 释 86 //现在 mybatis 87 try { 88 /* //指定mybatis主配置文件地址 89 String resource = "myBatis-config.xml"; 90 //读取配置文件内容 91 Reader reader = Resources.getResourceAsReader(resource); 92 //从配置文件(通常是XML配置文件中)得到 sqlSessionfactory 93 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);*/ 94 95 // MybatisUtil mybatisUtil = new MybatisUtil(); 96 97 // SqlSessionFactory sqlSessionFactory =MybatisUtil.getSqlSessionFactory(); 98 // 由sqlSessionfactory 产生 sqlSession(相当于Connection)。 99 // SqlSession sqlSession = sqlSessionFactory.openSession(); 100 101 SqlSession sqlSession = MybatisUtil.getSqlSession(); 102 103 sqlSession.update("org.mybatis.example.BlogMapper.uu", ticket); 104 //提交事物 105 sqlSession.commit(); 106 sqlSession.close(); 107 108 } catch (Exception e) { 109 e.printStackTrace(); 110 } 111 } 112 113 @Override 114 public Ticket queryById(Integer id) { 115 try { 116 /* //指定mybatis主配置文件地址 117 String resource = "myBatis-config.xml"; 118 //读取配置文件内容 119 Reader reader = Resources.getResourceAsReader(resource); 120 //从配置文件(通常是XML配置文件中)得到 sqlSessionfactory 121 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);*/ 122 123 // MybatisUtil mybatisUtil = new MybatisUtil(); 124 125 // SqlSessionFactory sqlSessionFactory =MybatisUtil.getSqlSessionFactory(); 126 // 由sqlSessionfactory 产生 sqlSession(相当于Connection)。 127 // SqlSession sqlSession = sqlSessionFactory.openSession(); 128 SqlSession sqlSession = MybatisUtil.getSqlSession(); 129 //sqlSession 中完成对数据的增删改查和事务提交等 130 Ticket ticket = (Ticket) sqlSession.selectOne("org.mybatis.example.BlogMapper.yy", id); 131 sqlSession.close(); 132 return ticket; 133 } catch (Exception e) { 134 e.printStackTrace(); 135 } 136 return null; 137 } 138 139 @Override 140 public List<Ticket> queryAll() { 141 142 try { 143 //指定mybatis主配置文件地址 144 /* String resource = "myBatis-config.xml"; 145 //读取配置文件内容 146 Reader reader = Resources.getResourceAsReader(resource); 147 //从配置文件(通常是XML配置文件中)得到 sqlSessionfactory 148 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);*/ 149 150 // MybatisUtil mybatisUtil = new MybatisUtil(); 151 152 // SqlSessionFactory sqlSessionFactory =MybatisUtil.getSqlSessionFactory(); 153 // 由sqlSessionfactory 产生 sqlSession(相当于Connection)。 154 // SqlSession sqlSession = sqlSessionFactory.openSession(); 155 156 SqlSession sqlSession = MybatisUtil.getSqlSession(); 157 //sqlSession 中完成对数据的增删改查和事务提交等 158 List<Ticket> list = sqlSession.selectList("org.mybatis.example.BlogMapper.ss"); 159 sqlSession.close(); 160 return list; 161 } catch (Exception e) { 162 e.printStackTrace(); 163 } 164 return null; 165 } 166 167 168 }
测试代码
1 @Test 2 public void testCRUD(){ 3 Ticket ticket = ticketDao.queryById(2); 4 System.out.println("ticket="+ticket); 5 6 Ticket ticket2 = new Ticket(); 7 ticket.setStartStation("上海"); 8 ticket.setStopStation("北京"); 9 ticketDao.save(ticket2); 10 11 ticketDao.deleteById(6); 12 13 Ticket ticket3 = new Ticket(); 14 ticket3.setId(2); 15 ticket3.setStartStation("北京-改"); 16 ticket3.setStopStation("成都"); 17 ticketDao.update(ticket3); 18 19 20 List<Ticket> tickets = ticketDao.queryAll(); 21 System.out.println(" tickets= "+tickets); 22 }
07.mybatis优化之硬编码优化
1.准备db.properties文件
1 #驱动 2 mysql.driverClass=com.mysql.jdbc.Driver 3 4 #数据库 5 mysql.JdbcUrl=jdbc:mysql://localhost:3306/station_data 6 7 #用户名 8 mysql.User=root 9 10 #密码 11 mysql.Password=admin
2.mybatis主配置文件中使用
08.mybatis优化之别名配置(生产上一般不配置别名)
配置位置:
使用:
09.列名与属性名称不一致的两种解决方案
10.获取自动生成的主键
官方文档显示:
在映射文件中配置与获取主键方式:
mybatis第一阶段就暂时讲到这里,其他的在项目中讲解!