SpringBoot(9) SpringBoot整合Mybaties
一、近幾年常用的訪問數據庫的方式和優缺點
1、原始java訪問數據庫
開發流程麻煩
<1>註冊驅動/加載驅動
Class.forName("com.mysql.jdbc.Driver")
<2>建立連接
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname","root","root");
<3>創建Statement
<4>執行SQL語句
<5>處理結果集
<6>關閉連接,釋放資源
2、apache dbutils框架
比上一步簡單點
官網:https://commons.apache.org/proper/commons-dbutils/
3、jpa框架
spring-data-jpa
jpa在復雜查詢的時候性能不是很好
4、Hiberante 解釋:ORM:對象關系映射Object Relational Mapping
企業大都喜歡使用hibernate
5、Mybatis框架
互聯網行業通常使用mybatis
不提供對象和關系模型的直接映射,半ORM
二、Mybatis準備
1、使用starter, maven倉庫地址:http://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter
2、加入依賴(可以用 http://start.spring.io/ 下載)
1 <!-- 引入starter--> 2 <dependency> 3 <groupId>org.mybatis.spring.boot</groupId> 4 <artifactId>mybatis-spring-boot-starter</artifactId> 5 <version>1.3.2</version> 6 <scope>runtime</scope> 7 </dependency> 8 9 <!-- MySQL的JDBC驅動包 --> 10 <dependency> 11 <groupId>mysql</groupId> 12 <artifactId>mysql-connector-java</artifactId> 13 <scope>runtime</scope> 14 </dependency> 15 <!-- 引入第三方數據源 --> 16 <dependency> 17 <groupId>com.alibaba</groupId> 18 <artifactId>druid</artifactId> 19 <version>1.1.6</version> 20 </dependency>
3、在application.properties文件中加入
1 #可以自動識別 2 #spring.datasource.driver-class-name =com.mysql.jdbc.Driver 3 4 spring.datasource.url=jdbc:mysql://localhost:3306/movie?useUnicode=true&characterEncoding=utf-8 5 spring.datasource.username =root 6 spring.datasource.password =password 7 8 #使用阿裏巴巴druid數據源,默認使用自帶的 9 spring.datasource.type =com.alibaba.druid.pool.DruidDataSource 10 11 #開啟控制臺打印sql 12 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
註: <1>driver-class-name不需要加入,可以自動識別
<2>數據庫連接池可以用自帶的 com.zaxxer.hikari.HikariDataSource
<3>加載配置,註入到sqlSessionFactory等都是springBoot幫我們完成
4、啟動類增加mapper掃描
@MapperScan("net.xdclass.base_project.mapper")
技巧:保存對象,獲取數據庫自增id
@Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")
註:開發mapper,參考語法 http://www.mybatis.org/mybatis-3/zh/java-api.html
5、相關資料:
http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/#Configuration
https://github.com/mybatis/spring-boot-starter/tree/master/mybatis-spring-boot-samples
整合問題集合:
https://my.oschina.net/hxflar1314520/blog/1800035
https://blog.csdn.net/tingxuetage/article/details/80179772
6.代碼演示
項目結構
啟動類
1 @SpringBootApplication //一個註解頂下面3個 2 @MapperScan("net.xdclass.base_project.mapper") 3 public class XdclassApplication { 4 5 public static void main(String[] args) throws Exception { 6 SpringApplication.run(XdclassApplication.class, args); 7 } 8 9 }
Mapper層的UserMapper
1 public interface UserMapper { 2 3 4 //推薦使用#{}取值,不要用${},因為存在註入的風險 5 @Insert("INSERT INTO user(name,phone,create_time,age) VALUES(#{name}, #{phone}, #{createTime},#{age})") 6 @Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id") //keyProperty java對象的屬性;keyColumn表示數據庫的字段 7 int insert(User user); 8 9 10 11 /** 12 * 功能描述:查找全部 13 * @return 14 */ 15 @Select("SELECT * FROM user") 16 @Results({ 17 @Result(column = "create_time",property = "createTime"), 18 @Result(column = "create_time",property = "createTime") 19 //javaType = java.util.Date.class 20 }) 21 List<User> getAll(); 22 23 24 25 /** 26 * 功能描述:根據id找對象 27 * @param id 28 * @return 29 */ 30 @Select("SELECT * FROM user WHERE id = #{id}") 31 @Results({ 32 @Result(column = "create_time",property = "createTime") 33 }) 34 User findById(Long id); 35 36 37 38 /** 39 * 功能描述:更新對象 40 * @param user 41 */ 42 @Update("UPDATE user SET name=#{name} WHERE id =#{id}") 43 void update(User user); 44 45 /** 46 * 功能描述:根據id刪除用戶 47 * @param userId 48 */ 49 @Delete("DELETE FROM user WHERE id =#{userId}") 50 void delete(Long userId); 51 52 }
註:在查找中@Result表示:從表中的column映射到user類中的property。如果有多個用逗號分隔。
Service層的UserService
1 public interface UserService { 2 3 public int add(User user); 4 5 }
ServiceImpl層的UserServiceImpl
1 @Service 2 public class UserServiceImpl implements UserService{ 3 4 @Autowired 5 private UserMapper userMapper; 6 7 @Override 8 public int add(User user) { 9 userMapper.insert(user); 10 int id = user.getId(); 11 return id; 12 } 13 14 }
Controller層的UserController
1 @RestController 2 @RequestMapping("/api/v1/user") 3 public class UserController { 4 5 6 @Autowired 7 private UserService userService; 8 9 @Autowired 10 private UserMapper userMapper; 11 12 13 /** 14 * 功能描述: user 保存接口 15 * @return 16 */ 17 @GetMapping("add") 18 public Object add(){ 19 20 User user = new User(); 21 user.setAge(11); 22 user.setCreateTime(new Date()); 23 user.setName("xdclass"); 24 user.setPhone("10010000"); 25 int id = userService.add(user); 26 27 return JsonData.buildSuccess(id); 28 } 29 30 31 32 /** 33 * 功能描述:查找全部用戶 34 * @return 35 */ 36 @GetMapping("findAll") 37 public Object findAll(){ 38 39 return JsonData.buildSuccess(userMapper.getAll()); 40 } 41 42 43 44 @GetMapping("find_by_id") 45 public Object findById(long id){ 46 return JsonData.buildSuccess(userMapper.findById(id)); 47 } 48 49 50 @GetMapping("del_by_id") 51 public Object delById(long id){ 52 userMapper.delete(id); 53 return JsonData.buildSuccess(); 54 } 55 56 @GetMapping("update") 57 public Object update(String name,int id){ 58 User user = new User(); 59 user.setName(name); 60 user.setId(id); 61 userMapper.update(user); 62 return JsonData.buildSuccess(); 63 } 64 65 }
SpringBoot(9) SpringBoot整合Mybaties