1. 程式人生 > >SpringBoot(9) SpringBoot整合Mybaties

SpringBoot(9) SpringBoot整合Mybaties

localhost select 1.3 .class tis rgs state api class

一、近幾年常用的訪問數據庫的方式和優缺點
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