SpringBoot:4.SpringBoot統合MyBatisのは、データベース・アクセスを実装

同社のプロジェクトの開発では、MyBatisの過半数の使用。SpringBoot:使用3.SpringBoot春データを-JPAデータベース・アクセスを実現する、JPAのJavaコード、SQL文のこのスタイルを、分離の合計感は徹底十分ではありません一緒に入れ。個人的な習慣に基づいて、まだ別々のコードとSQL、SQLステートメントに好む、どんなに複雑なXMLファイルには、比較的単純なので、肥大化していないXMLのルックスに書いています。

1.統合MyBatisの

1.1の追加はのpom.xmlを頼ります

それは4に主に依存しています:

ばねブートスターターテスト、スプリングブートスタータ:ユニットテスト

MyBatisのスプリング・ブート・スターター:MyBatisのコアに依存

MySQLのコネクタ-javaの:MySQLの依存関係、データベースへのアクセス

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency> 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!-- 引入MySQL连接的依赖包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.21</version>
        </dependency>                   

1.2構成データベース情報

MySQL設定関連情報application.properties

#数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#mybatis放置xml文件的地方,我们配置在classpath下的mapper文件夹下
mybatis.mapper-locations=classpath*:mapper/*.xml

1.3ユーザ・テーブルを作成します。

SQL文に従うことによって、ユーザテーブル情報を作成します:ID、名前(名)、年齢(歳)が含まれます。

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

1.4エンティティクラスを作成します

ユーザエンティティクラスのマッピングテーブルを作成します。

package com.w3cjava.entity;
public class User {
    private Long id;

    private String name;

    private Integer age;

    public User() {
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }   
}

1.5データアクセスレイヤダオ

ユーザーUserDaoレイヤエンティティクラスを作成し、簡単なCRUD操作。

package com.w3cjava.dao;

import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.w3cjava.entity.User;

@Mapper
public interface UserDao{
    int insert(@Param("name") String name, @Param("age") Integer age);

    /**
     * 
     * @author cos
     * @desc 通过Map<String, Object>对象来作为传递参数的容器
     * @param map
     * @return
     */
    int insertByMap(Map<String, Object> map);
    /**
     * 
     * @author cos
     * @desc 使用对象
     * @param user
     * @return
     */
    
    int insert(User user);
    
    void update(User user);

    void delete(Long id);
    /**
     * 
     * @author cos
     * @desc 返回结果的绑定
     * @return
     */
    List<User> findAll();    
    /**
     * 
     * @author cos
     * @desc 使用@Param传参,@Param中定义的name对应了SQL中的#{name},age对应了SQL中的#{age}
     * @param name
     * @return
     */
    User findByName(@Param("name") String name);
}

1.6データアクセスXMLマッピング

mybatis.mapperによる=クラスパス-場所:マッパー/ .xmlの設定、我々はクラスパスフォルダ内のマッパーXMLファイル内UserDao対応するマッピングを作成します。

<?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.w3cjava.dao.UserDao">
    <sql id="testColumns">
        a.id AS "id",
        a.name AS "name",
        a.age AS "age"
    </sql>
    
    <sql id="testJoins">
    </sql>
    <!-- 查询所有user -->
     <select id="findByName" resultType="com.w3cjava.entity.User">
            select 
                <include refid="testColumns"/>
             from user a 
             WHERE a.name = #{name}
     </select>  
     
    <!-- 查询所有user -->
     <select id="findAll" resultType="com.w3cjava.entity.User">
            select 
                <include refid="testColumns"/>
             from user a 
     </select>       
         
    <insert id="insert">
        INSERT INTO user(
            name,
            age
        ) VALUES (
            #{name},
            #{age}
            )
    </insert>
    
    <insert id="insertByMap">
        INSERT INTO user(
            name,
            age
        ) VALUES (
            #{name,jdbcType=VARCHAR},
            #{age,jdbcType=INTEGER}
            )
    </insert>
    <update id="update">
        UPDATE user SET age=#{age} WHERE name=#{name}
    </update>
    <delete id="delete">
        DELETE FROM user WHERE id =#{id}
    </delete>   
</mapper>

2.アプリケーションの起動クラス

メインクラスを作成します。注釈を追加する@EnableTransactionManagement理由は、テストが完了した後、データベースのデータが汚染されないことを確実にするために、各試験時間後にユニットを使用して注釈を確認することです。次のテストを開始するために。

package com.w3cjava;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
 * 
 * @class  SpringBootMybatisApplication
 * @version SpringBoot 2.1.9
 * @author cos
 * @desc   整合Mybatis
 *
 */
@SpringBootApplication
@EnableTransactionManagement
public class SpringBootMybatisApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootMybatisApplication.class, args);
    }

}

3.ユニットテスト

基本的なロジックテスト:

  • データベースにデータを挿入します
  • データクエリの一部
  • 各ユニット・テスト・データの独立性を確保するためにロールバック、@、トランザクション@ロールバックデータを使用することにより。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {SpringBootMybatisApplication.class})
public class UserServiceTest {
    @Autowired
    private UserDao userDao;
    @Test
    @Transactional
    @Rollback
    public void insert() throws Exception {
        userDao.insert("AAA", 20);
    }
    
    @Test
    @Transactional
    @Rollback
    public void findByName() throws Exception {
        userDao.insert("AAA", 20);
        User u = userDao.findByName("AAA");
        Assert.assertEquals(20, u.getAge().intValue());
    }
    
    @Test
    @Transactional
    @Rollback
    public void testMap() throws Exception{
        Map<String, Object> map = new HashMap<>();
        map.put("name", "CCC");
        map.put("age", 40);
        userDao.insertByMap(map);
    }
    
    
    @Test
    @Transactional
    @Rollback
    public void testuserDao() throws Exception {
        // insert一条数据,并select出来验证
        userDao.insert("AAA", 20);
        User u = userDao.findByName("AAA");
        Assert.assertEquals(20, u.getAge().intValue());
        // update一条数据,并select出来验证
        u.setAge(30);
        userDao.update(u);
        u = userDao.findByName("AAA");
        Assert.assertEquals(30, u.getAge().intValue());
        // 删除这条数据,并select验证
        userDao.delete(u.getId());
        u = userDao.findByName("AAA");
        Assert.assertEquals(null, u);
    }
    
    
    @Test
    @Transactional
    @Rollback
    public void testSelectMapper() throws Exception {
        List<User> userList = userDao.findAll();
        for(User user : userList) {
            Assert.assertEquals(null, user.getId());
            Assert.assertNotEquals(null, user.getName());
        }
    }
}

4.参考記事

春試験@Rollbackロールバック:https://www.jianshu.com/p/3b245b002dff

5.記事のソース

04.Spring-ブートMyBatisのは、
2次元コードの懸念「以下の表面を掃くへようこそ余弦プロット」公共マイクロ信号
ここに画像を挿入説明
米国に期待して、すべてのもので

おすすめ

転載: www.cnblogs.com/cosecholand/p/11915281.html