IDEA創建Springboot項目(入門級)(2)------整合mybatis

1、先導入mybatis依賴

<!-- mybatis依賴 -->
<dependency>
<groupId>org.mybatis</groupId>
   <artifactId>mybatis</artifactId>
   <version>3.4.1</version>
</dependency>
<!-- mybatis-spring-boot整合包 -->
<dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>1.3.1</version>
</dependency>

(>v<)不要忘記數據庫連接驅動

<!-- mysql驅動 -->
<dependency>
<groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.38</version>
</dependency>
<!-- jdbc 連接技術 -->
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-jdbc</artifactId>
   <version>4.3.18.RELEASE</version>
</dependency>
<!-- c3p0 連接池 -->
<dependency>
   <groupId>com.mchange</groupId>
   <artifactId>c3p0</artifactId>
   <version>0.9.5.2</version>
</dependency>

2、mybatis的配置文件

mybatis官網:http://www.mybatis.org/mybatis-3/getting-started.html

Building SqlSessionFactory from XML

在 MyBatis 中,使用 SqlSessionFactoryBuilder創建SqlSessionFactory ,進而來創建 SqlSession。一旦你獲得一個 session 之後,你可以使用它來執行映射語句,提交或回滾連接,最後,當不再需要它的時候,你可以關閉 session。

mybatis核心配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <!-- database Connection 抽出放在spring的application.xml文件,也可以在.yml文件中配置 -->

</configuration>

3、配置數據庫連接文件(applicationContext-datasource.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--配置數據庫連接-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/testdb"/>
        <property name="user" value="root"/>
        <property name="password" value="root"/>
    </bean>
</beans>

3、接下來寫一個簡單的業務處理

controller層 ——> service層 ——> dao層 ——> DB

來個簡單的新增記錄,新建表

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `username` varchar(50) NOT NULL COMMENT '用戶名',
  `password` varchar(50) NOT NULL COMMENT '密碼',
  `uname` varchar(50) NOT NULL COMMENT '姓名',
  `sex` tinyint(4) NOT NULL COMMENT '性別',
  `age` tinyint(4) NOT NULL COMMENT '年齡',
  `updatetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後更新時間',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

創建實體類 UserEntity ,我懶(=v=)代碼省略

controller類

package com.example.demo.controller;
import com.example.demo.entity.UserEntity;
import com.example.demo.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Autowired
    private IUserService userService;
    
    @RequestMapping("/insert")
    public String insertTest(UserEntity user){
        user = new UserEntity();
        user.setUsername("ilovefood");
        user.setPassword("123456");
        user.setUname("kite");
        user.setSex(1);
        user.setAge(16);

        //調用service層方法
        userService.insertUser(user);
        return "添加記錄成功!";
    }
}

service層

package com.example.demo.service;
import com.example.demo.entity.UserEntity;

public interface IUserService {
    void insertUser(UserEntity user);
}
package com.example.demo.service.impl;
import com.example.demo.dao.IUserDao;
import com.example.demo.entity.UserEntity;
import com.example.demo.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements IUserService {

    @Autowired
    private IUserDao userDao;

    @Override
    public void insertUser(UserEntity user) {
        //調用dao層方法
        userDao.insert(user);
    }
}

dao層

package com.example.demo.dao;
import com.example.demo.entity.UserEntity;

public interface IUserDao {
    void insert(UserEntity user);
}

映射器

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--命名空間使得你所見到的接口綁定-->
<mapper namespace="com.example.demo.dao.IUserDao">

    <select id="insert" resultType="com.example.demo.entity.UserEntity">
      INSERT into
      user (username,password,uname,sex,age,updatetime)
      VALUES (#{username},#{password},#{uname},#{sex},#{age},#{updatetime})
    </select>
</mapper>

配置映射器文件(applicationContext-dao.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://mybatis.org/schema/mybatis-spring
       http://mybatis.org/schema/mybatis-spring.xsd">

    <!--mybatis掃描-->
    <mybatis:scan base-package="com.example.demo.dao"/>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--配置數據源-->
        <property name="dataSource" ref="dataSource"/>
        <!--mybatis核心配置文件-->
        <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
        <!--配置mybatis的映射器-->
        <property name="mapperLocations" value="classpath:com/example/demo/dao/mapper/*Mapper.xml"/>
    </bean>
</beans>

@ImportResource 加載xml文件

package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

//@SpringBootApplication(scanBasePackages = "com.example.demo.controller")
@SpringBootApplication
@ImportResource("classpath:spring/applicationContext-*.xml") 
@EnableAutoConfiguration
public class DemoApplication {

   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

*小筆記

classpath和classpath*區別: 

classpath:只會到你的class路徑中查找找文件。

classpath*:不僅包含class路徑,還包括jar文件中(class路徑)進行查找。

注意: 用classpath*:需要遍歷所有的classpath,所以加載速度是很慢的;因此,在規劃的時候,應該儘可能規劃好資源文件所在的路徑,儘量避免使用classpath*  (來源:https://www.cnblogs.com/EasonJim/p/6709314.html

 

然而,第一次運行報錯:Field userDao in com.example.demo.service.impl.UserServiceImpl required a bean of type 'com.example.demo.dao.IUserDao' that could not be found.

找不到 userDao bean ??? 怎麼會找不到,難道沒掃描到嗎?(檢查一番,改有的註解都有了)

 

解決方案:

pom.xml 中 build resource ,將 mapper.xml 文件打包

<build>
   <resources>
      <resource>
         <directory>src/main/java</directory>
         <includes>
             <include>com/example/demo/dao/mapper/*Mapper.xml</include>
         </includes>
      </resource>
   </resources>
</build>

最後成功運行,地址欄輸入請求URL

數據庫user表

success!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章