记录一下,不用Spring Boot而直接使用MyBatis的配置,报了好多错
目录结构
- resources目录的下的mapper文件夹名字乱取
- 以Spring开头的两个Java文件可以不要
- 不使用Mapper动态代理的话,java文件夹下的mapper文件夹也可以不要
gradle
buildscript {
ext.kotlin_version = '1.2.0'
ext {
springBootVersion = '2.0.0.M7'
}
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
dependencies {
compile group: 'log4j', name: 'log4j', version: '1.2.17'
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.25'
compile('org.springframework.boot:spring-boot-starter-aop')
compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.1')
compile('org.springframework.boot:spring-boot-starter-webflux')
runtime('mysql:mysql-connector-java')
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('io.projectreactor:reactor-test')
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
}
配置文件
mybatis-config.xml
<?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>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<package name="com.example.demo.domain"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/CountryMapper.xml"/>
</mappers>
</configuration>
log4j.properties
log4j.rootLogger=ERROR, stdout
#根据XXXmapper.xml命名空间来TRACE
log4j.logger.com.example.demo.mapper=TRACE
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
mapper和Domain
Country.java
public class Country {
private Long id;
private String countryname;
private String countrycode;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCountryname() {
return countryname;
}
public void setCountryname(String countryname) {
this.countryname = countryname;
}
public String getCountrycode() {
return countrycode;
}
public void setCountrycode(String countrycode) {
this.countrycode = countrycode;
}
}
CountryMapper.java
package com.example.demo.mapper;
import com.example.demo.domain.Country;
import java.util.List;
public interface CountryMapper {
List<Country> selectAll();
}
CountryMapper.xml
<?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.mapper.CountryMapper">
<select id="selectAll" resultType="Country">
select id, countryname, countrycode from country;
</select>
</mapper>
- 注意namespace
对Kotlin的支持
Country.kt
class Country {
var id: Long? = null
var countryname: String? = null
var countrycode: String? = null
}
//或者
/*
data class Country (
var id: Int? = null,
var countryname: String? = null,
var countrycode: String? = null
)
*/
CountryMapper.kt
package com.example.demo.mapper
import com.example.demo.domain.Country
interface CountryMapper {
fun selectAll(): List<Country>
}
测试程序
package com.example.demo.mapper
import com.example.demo.domain.Country
import org.apache.ibatis.io.Resources
import org.apache.ibatis.session.SqlSessionFactory
import org.apache.ibatis.session.SqlSessionFactoryBuilder
import org.junit.Before
import org.junit.Test
/**
* Created by 顾文涛 on 2017/12/8.
*/
class UserMapperTest{
var sqlSessionFactory: SqlSessionFactory? = null
@Before
fun init() {
val reader = Resources.getResourceAsReader("mybatis-config.xml")
sqlSessionFactory = SqlSessionFactoryBuilder().build(reader)
reader.close()
}
@Test
fun testSelectAll() {
val sqlSession = sqlSessionFactory?.openSession()
try {
val mapper = sqlSession?.getMapper(CountryMapper::class.java)
val users = mapper?.selectAll()
print(users)
} finally {
sqlSession?.close()
}
}
}