Commit bd349509 authored by luo.qitao's avatar luo.qitao
parents 0bb372c7 e624934c
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GitSharedSettings">
<option name="FORCE_PUSH_PROHIBITED_PATTERNS">
<list>
<option value="dev" />
</list>
</option>
</component>
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="src/main/resource"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>mybatis</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>
eclipse.preferences.version=1
eclipse.preferences.version=1
encoding//src/main/java=UTF-8
encoding//src/test/java=UTF-8
encoding/<project>=UTF-8
eclipse.preferences.version=1
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.source=1.8
activeProfiles=
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ces</groupId>
<artifactId>mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mybatis</name>
<!--spring boot 版本 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
<poi.version>4.1.0</poi.version>
<mybatis-spring-boot-starter.version>1.1.1</mybatis-spring-boot-starter.version>
<druid.version>1.0.29</druid.version>
<fastjson.version>1.2.32</fastjson.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- json处理工具 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!-- druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- 数据库连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.22</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>xdocreport</artifactId>
<version>2.0.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.6.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.spring4all/swagger-spring-boot-starter -->
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.9.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
1.项目resource下的application.yml为配置文件,请修改datasource下的url、username、password,保证存在对应的数据库。
1.项目resource下的application.yml为配置文件,请修改datasource下的url、username、password,保证存在对应的数据库。
生成项目对应的数据表:
/*Table structure for table `t_sys_user` */
DROP TABLE IF EXISTS `t_sys_user`;
CREATE TABLE `t_sys_user` (
`user_id` varchar(20) NOT NULL COMMENT '用户id',
`user_name` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '用户名',
`password` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '密码',
`context` varchar(1000) COLLATE utf8_bin DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户信息表';
2.打开项目执行 test目录下的AppTest测试用例
\ No newline at end of file
package com.ces.mybatis;
package com.ces.mybatis;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import com.spring4all.swagger.EnableSwagger2Doc;
@EnableSwagger2Doc
@SpringBootApplication
@ComponentScan({"com.ces"})
@MapperScan("com.ces.*.dao")
public class Application
{
public static void main( String[] args )
{
SpringApplication.run(Application.class, args);
}
}
package com.ces.mybatis.dao;
package com.ces.mybatis.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ces.mybatis.model.User;
public interface IUserDao {
int insert(User user);
boolean insertOrUpdateByBatch(@Param("list")List<User> list);
int update(User user);
int delete(@Param("userId")String userId);
List<User> getAll();
User find(String userId);
}
package com.ces.mybatis.model;
package com.ces.mybatis.model;
public class Context {
private String province;
private String city;
private String district;
public Context() {
}
public Context(String username, String password, Boolean enabled, String context) {
this.province = username;
this.city = password;
this.district = password;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getDistrict() {
return district;
}
public void setDistrict(String district) {
this.district = district;
}
}
\ No newline at end of file
package com.ces.mybatis.model;
package com.ces.mybatis.model;
public class User {
private String userId;
private String userName;
private String password;
private Context context;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Context getContext() {
return context;
}
public void setContext(Context context) {
this.context = context;
}
}
package com.ces.mybatis.service;
package com.ces.mybatis.service;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ces.mybatis.model.User;
public interface IUserService {
List<User> getAll();
int insert(User user);
int delete(String userId);
int update(User user);
User find(String userId);
boolean insertOrUpdateByBatch(List<User> list);
}
package com.ces.mybatis.service.impl;
package com.ces.mybatis.service.impl;
import java.util.List;
import com.ces.mybatis.model.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import com.ces.mybatis.dao.IUserDao;
import com.ces.mybatis.service.IUserService;
@Service
public class UserService implements IUserService {
private static final Logger LOGGER = LoggerFactory.getLogger(UserService.class);
@Autowired
private IUserDao userDao;
@Override
public List<User> getAll() {
return userDao.getAll();
}
@Override
public int insert(User user) {
return userDao.insert(user);
}
@Override
public int delete(String userId) {
return userDao.delete(userId);
}
@Override
public int update(User user) {
User userOutVo=null;
if(user!=null && !StringUtils.isEmpty(user.getUserId())) {
userOutVo=userDao.find(user.getUserId());
if(userOutVo!=null) {
LOGGER.info("用户名:"+user.getUserName());
userOutVo.setUserName(user.getUserName());
userOutVo.setPassword(user.getPassword());
userOutVo.setContext(user.getContext());
}
}
return userDao.update(userOutVo);
}
@Override
public User find(String userId) {
return userDao.find(userId);
}
@Override
public boolean insertOrUpdateByBatch(List<User> list) {
return userDao.insertOrUpdateByBatch(list);
}
}
package com.ces.mybatis.typeHandler;
package com.ces.mybatis.typeHandler;
import com.ces.mybatis.model.*;
import com.alibaba.fastjson.JSONObject;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.apache.ibatis.type.TypeHandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@MappedTypes({Context.class})
@MappedJdbcTypes({JdbcType.VARCHAR})
public class ContentTypeHandler implements TypeHandler<Context> {
@Override
public void setParameter(PreparedStatement preparedStatement, int i, Context context, JdbcType jdbcType) throws SQLException {
String s = JSONObject.toJSONString(context);
preparedStatement.setString(i, s);
}
@Override
public Context getResult(ResultSet rs, String columnName) throws SQLException {
String string = rs.getString(columnName);
return JSONObject.parseObject(string, Context.class);
}
@Override
public Context getResult(ResultSet rs, int columnIndex) throws SQLException {
String string = rs.getString(columnIndex);
return JSONObject.parseObject(string, Context.class);
}
@Override
public Context getResult(CallableStatement cs, int columnIndex) throws SQLException {
String string = cs.getString(columnIndex);
return JSONObject.parseObject(string, Context.class);
}
}
spring:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/ces?useUnicode=true&characterEncoding=utf8&autoReconnect=true&serverTimezone=Asia/Shanghai
username: root
password: root
druid:
validationQuery: SELECT 1
initialSize: 10
minIdle: 10
maxActive: 200
minEvictableIdleTimeMillis: 180000
testOnBorrow: false
testWhileIdle: true
removeAbandoned: true
removeAbandonedTimeout: 1800
logAbandoned: true
poolPreparedStatements: true
maxOpenPreparedStatements: 100
server:
port: 80
servlet-path: /
mybatis:
mapper-locations:
- classpath*:/mapper/*.xml
- classpath*:/com/ces/*/dao/*.xml
typeAliasesPackage: com.ces.*.model
type-handlers-package: com.ces.mybatis.typeHandler
configuration:
map-underscore-to-camel-case: true
lazy-loading-enabled: false
auto-mapping-behavior: full
useGeneratedKeys: true
useColumnLabel: true
mapUnderscoreToCamelCase: true
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<?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.ces.mybatis.dao.IUserDao">
<resultMap id="BaseResultMap" type="com.ces.mybatis.model.User">
<id column="user_id" property="userId" />
<result column="user_name" property="userName" />
<result column="password" property="password" />
<result column="context" property="context" typeHandler="com.ces.mybatis.typeHandler.ContentTypeHandler"/>
</resultMap>
    <insert id="insert" useGeneratedKeys="true" keyProperty="userId" keyColumn="user_id" parameterType="com.ces.mybatis.model.User">
        insert into t_sys_user(user_id,user_name,password,context) values(#{userId},#{userName},#{password},#{context})
    </insert>
<insert id="insertOrUpdateByBatch" keyProperty="userId" useGeneratedKeys="true" keyColumn="user_id" >
insert into t_sys_user (user_id,user_name,password,context)
VALUES
<foreach item="user" index= "index" collection ="list" separator ="),(" open="(" close=")">
user.userId,user.userName,user.password,user.context
</foreach>
ON DUPLICATE KEY UPDATE
user_name = VALUES(user_name)
password = VALUES(password)
context = VALUES(context)
</insert>
    <update id="update" parameterType="com.ces.mybatis.model.User">
       update t_sys_user
       <set>
           <if test="userName != null">user_name=#{userName},</if>
           <if test="password != null">password=#{password},</if>
           <if test="context != null">context=#{context},</if>
       </set>
        where user_id=#{userId}
    </update>
    <delete id="delete">
        delete from t_sys_user where user_id=#{userId}
    </delete>
    <select id="getAll" resultType="com.ces.mybatis.model.User" >
       select user_id,user_name,password,context from t_sys_user order by user_id desc
    </select>
    <select id="find" resultType="com.ces.mybatis.model.User" >
        select user_id,user_name,password,context  from t_sys_user where user_id = #{userId}
    </select>
</mapper>
\ No newline at end of file
package com.ces.mybatis;
package com.ces.mybatis;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.TransactionIsolationLevel;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.test.context.junit4.SpringRunner;
import com.ces.mybatis.dao.IUserDao;
import com.ces.mybatis.model.Context;
import com.ces.mybatis.model.User;
import com.ces.mybatis.service.IUserService;
/**
* Unit test for simple App.
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class AppTest
{
private static final AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext("application.yml");
// 注入“Converter”bean
@Autowired
private IUserService userService;
/**
* 1. 自定义TypeHandler类
*/
@Test
public void test1(){
List<User> user = userService.getAll();
System.out.println(user);
}
/**
* 2. Mybatis 批量插入数据库代码
*/
@Test
public void test2(){
SqlSessionFactory sqlSessionFactory = context
.getBean("sqlSessionFactory", SqlSessionFactory.class);
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, TransactionIsolationLevel.READ_COMMITTED);
IUserDao mapper = sqlSession.getMapper(IUserDao.class);
List<User> users = new ArrayList<User>();
for(int i=0;i<3;i++){
User user = new User();
user.setUserId(String.valueOf(i));
user.setUserName("admin"+i);
user.setPassword("123");
Context context = new Context();
context.setCity("city");
context.setProvince("province");
context.setDistrict("district");
user.setContext(context);
users.add(user);
}
boolean isSuccess = mapper.insertOrUpdateByBatch(users);
System.out.println(isSuccess);
// 刷新
sqlSession.flushStatements();
}
}
spring:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/lsgz?useUnicode=true&characterEncoding=utf8&autoReconnect=true&serverTimezone=Asia/Shanghai
username: root
password: ces123
druid:
validationQuery: SELECT 1
initialSize: 10
minIdle: 10
maxActive: 200
minEvictableIdleTimeMillis: 180000
testOnBorrow: false
testWhileIdle: true
removeAbandoned: true
removeAbandonedTimeout: 1800
logAbandoned: true
poolPreparedStatements: true
maxOpenPreparedStatements: 100
server:
port: 81
servlet-path: /
mybatis:
mapper-locations:
- classpath*:/mapper/*.xml
- classpath*:/com/ces/*/dao/*.xml
typeAliasesPackage: com.ces.*.model
type-handlers-package: com.ces.mybatis.typeHandler
configuration:
map-underscore-to-camel-case: true
lazy-loading-enabled: false
auto-mapping-behavior: full
useGeneratedKeys: true
useColumnLabel: true
mapUnderscoreToCamelCase: true
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<?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.ces.mybatis.dao.IUserDao">
<resultMap id="BaseResultMap" type="com.ces.mybatis.model.User">
<id column="user_id" property="userId" />
<result column="user_name" property="userName" />
<result column="password" property="password" />
<result column="context" property="context" typeHandler="com.ces.mybatis.typeHandler.ContentTypeHandler"/>
</resultMap>
    <insert id="insert" useGeneratedKeys="true" keyProperty="userId" keyColumn="user_id" parameterType="com.ces.mybatis.model.User">
        insert into t_sys_user(user_id,user_name,password,context) values(#{userId},#{userName},#{password},#{context})
    </insert>
<insert id="insertOrUpdateByBatch" keyProperty="userId" useGeneratedKeys="true" keyColumn="user_id" >
insert into t_sys_user (user_id,user_name,password,context)
VALUES
<foreach item="user" index= "index" collection ="list" separator ="),(" open="(" close=")">
user.userId,user.userName,user.password,user.context
</foreach>
ON DUPLICATE KEY UPDATE
user_name = VALUES(user_name)
password = VALUES(password)
context = VALUES(context)
</insert>
    <update id="update" parameterType="com.ces.mybatis.model.User">
       update t_sys_user
       <set>
           <if test="userName != null">user_name=#{userName},</if>
           <if test="password != null">password=#{password},</if>
           <if test="context != null">context=#{context},</if>
       </set>
        where user_id=#{userId}
    </update>
    <delete id="delete">
        delete from t_sys_user where user_id=#{userId}
    </delete>
    <select id="getAll" resultType="com.ces.mybatis.model.User" >
       select user_id,user_name,password,context from t_sys_user order by user_id desc
    </select>
    <select id="find" resultType="com.ces.mybatis.model.User" >
        select user_id,user_name,password,context  from t_sys_user where user_id = #{userId}
    </select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ces</groupId>
<artifactId>mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.ces.mybatis;
package com.ces.mybatis;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import com.alibaba.fastjson.JSONObject;
/***
* author wei.liu
*/
public class TypeHandle extends BaseTypeHandler<JSONObject>{
@Override
public JSONObject getNullableResult(ResultSet rs, String cloumName) throws SQLException {
String infoJsonString= rs.getString(cloumName);
JSONObject infObject=null;
try {
infObject = JSONObject.parseObject(infoJsonString);
} catch (Exception e) {
System.err.println("将json串转成json对象失败!");;
}
return infObject;
}
@Override
public JSONObject getNullableResult(CallableStatement arg0, int arg1) throws SQLException {
return null;
}
@Override
public void setNonNullParameter(PreparedStatement statement, int i, JSONObject infoObject, JdbcType jdbcType) throws SQLException {
try {
String userInfoString= JSONObject.toJSONString(infoObject);
statement.setString(i, userInfoString);
} catch (Exception e) {
System.out.println("----将对象转化为字符串失败----");
}
}
@Override
public JSONObject getNullableResult(ResultSet arg0, int arg1) throws SQLException {
return null;
}
}
package com.ces.mybatis;
package com.ces.mybatis;
import java.io.Serializable;
import com.alibaba.fastjson.JSONObject;
/***
* author wei.liu
*/
public class User implements Serializable{
int id;
String name;
JSONObject info;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public JSONObject getInfo() {
return info;
}
public void setInfo(JSONObject info) {
this.info = info;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", info=" + JSONObject.toJSONString(info) + "]";
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?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:命名空间,随便写,一般保证命名空间唯一 -->
<mapper namespace="MyMapper">
<!-- statement,内容:sql语句。id:唯一标识,随便写,在同一个命名空间下保持唯一
resultType:sql语句查询结果集的封装类型,tb_user即为数据库中的表
-->
<select id="selectUser" resultType="com.ces.mybatis.User">
select * from mybatis where id = #{id}
</select>
<insert id="insert" parameterType="com.ces.mybatis.User">
INSERT INTO mybatis (id, name, info)
VALUES(#{id}, #{name}, #{info})
</insert>
<insert id="insertBatch">
INSERT INTO mybatis
(id, name, info)
VALUES
<foreach collection ="list" item="user" separator =",">
(#{user.id}, #{user.name}, #{user.info})
</foreach >
</insert>
</mapper>
driver=com.mysql.cj.jdbc.Driver
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?seUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong
username=root
password=123456
<?xml version="1.0" encoding="UTF-8" ?>
<?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>
<properties resource="db.properties"></properties>
<typeHandlers>
<typeHandler handler="com.ces.mybatis.TypeHandle"></typeHandler>
</typeHandlers>
<!-- 环境,可以配置多个,default:指定采用哪个环境 -->
<environments default="dev">
<!-- id:唯一标识 -->
<environment id="dev">
<!-- 事务管理器,JDBC类型的事务管理器 -->
<transactionManager type="JDBC" />
<!-- 数据源,池类型的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" /> <!-- 配置了properties,所以可以直接引用 -->
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="MyMapper.xml" />
</mappers>
</configuration>
/*
/*
Navicat Premium Data Transfer
Source Server : 本机
Source Server Type : MySQL
Source Server Version : 80015
Source Host : localhost:3306
Source Schema : test
Target Server Type : MySQL
Target Server Version : 80015
File Encoding : 65001
Date: 09/12/2019 10:25:06
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for mybatis
-- ----------------------------
DROP TABLE IF EXISTS `mybatis`;
CREATE TABLE `mybatis` (
`id` int(32) NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`info` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ces</groupId>
<artifactId>mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.ces.mybatis;
package com.ces.mybatis;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import com.alibaba.fastjson.JSONObject;
/***
* 作者 zsh
*/
public class TypeHandle extends BaseTypeHandler<JSONObject>{
@Override
public JSONObject getNullableResult(ResultSet rs, String cloumName) throws SQLException {
String infoJsonString= rs.getString(cloumName);
JSONObject infObject=null;
try {
infObject = JSONObject.parseObject(infoJsonString);
} catch (Exception e) {
System.err.println("将json串转成json对象失败!");;
}
return infObject;
}
@Override
public JSONObject getNullableResult(CallableStatement arg0, int arg1) throws SQLException {
return null;
}
@Override
public void setNonNullParameter(PreparedStatement statement, int i, JSONObject infoObject, JdbcType jdbcType) throws SQLException {
try {
String userInfoString= JSONObject.toJSONString(infoObject);
statement.setString(i, userInfoString);
} catch (Exception e) {
System.out.println("----将对象转化为字符串失败----");
}
}
@Override
public JSONObject getNullableResult(ResultSet arg0, int arg1) throws SQLException {
return null;
}
}
package com.ces.mybatis;
package com.ces.mybatis;
import java.io.Serializable;
import com.alibaba.fastjson.JSONObject;
/***
* 作者 zsh
*/
public class User implements Serializable{
int id;
String name;
JSONObject info;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public JSONObject getInfo() {
return info;
}
public void setInfo(JSONObject info) {
this.info = info;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", info=" + JSONObject.toJSONString(info) + "]";
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?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:命名空间,随便写,一般保证命名空间唯一 -->
<mapper namespace="MyMapper">
<!-- statement,内容:sql语句。id:唯一标识,随便写,在同一个命名空间下保持唯一
resultType:sql语句查询结果集的封装类型,tb_user即为数据库中的表
-->
<select id="selectUser" resultType="com.ces.mybatis.User">
select * from mybatis where id = #{id}
</select>
<insert id="insert" parameterType="com.ces.mybatis.User">
INSERT INTO mybatis (id, name, info)
VALUES(#{id}, #{name}, #{info})
</insert>
<insert id="insertBatch">
INSERT INTO mybatis
(id, name, info)
VALUES
<foreach collection ="list" item="user" separator =",">
(#{user.id}, #{user.name}, #{user.info})
</foreach >
</insert>
</mapper>
driver=com.mysql.cj.jdbc.Driver
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?seUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong
username=root
password=123456
<?xml version="1.0" encoding="UTF-8" ?>
<?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>
<properties resource="db.properties"></properties>
<typeHandlers>
<typeHandler handler="com.ces.mybatis.TypeHandle"></typeHandler>
</typeHandlers>
<!-- 环境,可以配置多个,default:指定采用哪个环境 -->
<environments default="dev">
<!-- id:唯一标识 -->
<environment id="dev">
<!-- 事务管理器,JDBC类型的事务管理器 -->
<transactionManager type="JDBC" />
<!-- 数据源,池类型的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" /> <!-- 配置了properties,所以可以直接引用 -->
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="MyMapper.xml" />
</mappers>
</configuration>
/*
/*
Navicat Premium Data Transfer
Source Server : 本机
Source Server Type : MySQL
Source Server Version : 80015
Source Host : localhost:3306
Source Schema : test
Target Server Type : MySQL
Target Server Version : 80015
File Encoding : 65001
Date: 09/12/2019 10:25:06
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for mybatis
-- ----------------------------
DROP TABLE IF EXISTS `mybatis`;
CREATE TABLE `mybatis` (
`id` int(32) NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`info` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cesgroup.mybatis</groupId>
<artifactId>homework.mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 集中定义依赖版本号 -->
<properties>
<junit.version>4.12</junit.version>
<spring.version>5.0.10.RELEASE</spring.version>
<mybatis.version>3.4.6</mybatis.version>
<mybatis.spring.version>1.3.2</mybatis.spring.version>
<mysql.version>5.1.32</mysql.version>
<slf4j.version>1.6.4</slf4j.version>
<druid.version>1.0.9</druid.version>
<jstl.version>1.2</jstl.version>
<servlet-api.version>2.5</servlet-api.version>
<jsp-api.version>2.0</jsp-api.version>
</properties>
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!--spring集成测试-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
<version>${spring.version}</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.spring.version}</version>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--日志-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package com.cesgroup.practice.entity;
package com.cesgroup.practice.entity;
import com.alibaba.fastjson.JSONObject;
import java.io.Serializable;
public class User implements Serializable{
private int id;
private String name;
private JSONObject info;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public JSONObject getInfo() {
return info;
}
public void setInfo(JSONObject info) {
this.info = info;
}
}
package com.cesgroup.practice.handler;
package com.cesgroup.practice.handler;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.alibaba.fastjson.JSONObject;
public class JSONHandler extends BaseTypeHandler<JSONObject> {
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, JSONObject jsonObject, JdbcType jdbcType) throws SQLException {
try {
String userInfoString= JSONObject.toJSONString(jsonObject);
preparedStatement.setString(i, userInfoString);
} catch (Exception e) {
System.out.println("----将对象转化为字符串失败----");
}
}
@Override
public JSONObject getNullableResult(ResultSet resultSet, String s) throws SQLException {
String infoJsonString= resultSet.getString(s);
JSONObject infObject=null;
try {
infObject = JSONObject.parseObject(infoJsonString);
//System.out.println("----将json串转成json对象成功!----");
} catch (Exception e) {
System.err.println("将json串转成json对象失败!");;
}
return infObject;
}
@Override
public JSONObject getNullableResult(ResultSet resultSet, int i) throws SQLException {
return null;
}
@Override
public JSONObject getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
return null;
}
}
++ "b/\346\236\227\346\254\242\346\254\242_mybatis1/src/main/resources/spring/applicationContext.xml"
<?xml version="1.0" encoding="UTF-8" ?>
<?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>
<properties resource="db.properties"></properties>
<typeHandlers>
<typeHandler handler="com.cesgroup.mybatiswork.handle.MyTypeHandle"></typeHandler>
</typeHandlers>
<!-- 环境,可以配置多个,default:指定采用哪个环境 -->
<environments default="dev">
<!-- id:唯一标识 -->
<environment id="dev">
<!-- 事务管理器,JDBC类型的事务管理器 -->
<transactionManager type="JDBC" />
<!-- 数据源,池类型的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" /> <!-- 配置了properties,所以可以直接引用 -->
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="MyMapper.xml" />
</mappers>
</configuration>
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for mybatis
-- ----------------------------
DROP TABLE IF EXISTS `mybatis`;
CREATE TABLE `mybatis` (
`id` int(32) NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`info` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
<?xml version="1.0" encoding="UTF-8" ?>
<?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:命名空间,随便写,一般保证命名空间唯一 -->
<mapper namespace="useMapper">
<!-- statement,内容:sql语句。id:唯一标识,随便写,在同一个命名空间下保持唯一
resultType:sql语句查询结果集的封装类型,tb_user即为数据库中的表
-->
<select id="selectUser" resultType="com.cesgroup.mybatiswork.entity.User">
select * from mybatis where id = #{id}
</select>
<insert id="insert" parameterType="com.cesgroup.mybatiswork.entity.User">
INSERT INTO mybatis (id, name, info)
VALUES(#{id}, #{name}, #{info})
</insert>
<insert id="insertBatch">
INSERT INTO mybatis
(id, name, info)
VALUES
<foreach collection ="list" item="user" separator =",">
(#{user.id}, #{user.name}, #{user.info})
</foreach >
</insert>
</mapper>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.homework</groupId>
<artifactId>homework</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>homework</name>
<url>http://maven.apache.org</url>
<properties>
<spring.version>4.3.8.RELEASE</spring.version>
<spring.boot.version>1.5.10.RELEASE</spring.boot.version>
<spring.security.version>4.2.3.RELEASE</spring.security.version>
<junit.version>4.12</junit.version>
<jdk.version>1.8</jdk.version>
<jsp.version>2.2</jsp.version>
<servlet.version>3.1.0</servlet.version>
<jstl.version>1.2</jstl.version>
<slf4j-version>1.7.25</slf4j-version>
<hamcrest.core.version>1.3</hamcrest.core.version>
<mockito.core.version>2.8.9</mockito.core.version>
</properties>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>1.5.4.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.22</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>${hamcrest.core.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.core.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument-tomcat</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j-version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>1.5.3.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>homework</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package com;
package com;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableTransactionManagement
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.run(args);
}
}
package com.Config;
package com.Config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import com.alibaba.druid.pool.DruidDataSource;
@Configuration
public class AppConfig1 {
@Bean
public DruidDataSource dataSource() {
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/a_test?characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai");
ds.setUsername("root");
ds.setPassword("root");
ds.setInitialSize(5);
return ds;
}
@Bean
public DataSourceTransactionManager dataSourceTransactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:bean/UserMapper.xml"));
sessionFactory.setTypeAliasesPackage("com/Domain"); // 扫包
// 配置路径
sessionFactory.setConfigLocation(new ClassPathResource("sqlMapConfig.xml"));
return sessionFactory.getObject();
}
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer mScannerConfigurer = new MapperScannerConfigurer();
mScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
mScannerConfigurer.setBasePackage("com/Mapper"); // 扫mapper
return mScannerConfigurer;
}
}
\ No newline at end of file
package com.Config;
package com.Config;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.apache.ibatis.type.TypeHandler;
import com.Domain.Context;
import com.alibaba.fastjson.JSONObject;
@MappedTypes({Context.class})
@MappedJdbcTypes({JdbcType.VARCHAR})
public class MyTypeHandler implements TypeHandler<Context> {
@Override
public void setParameter(PreparedStatement preparedStatement, int i, Context user, JdbcType jdbcType) throws SQLException {
System.out.println("自定义类型转换");
String s = JSONObject.toJSONString(user);
preparedStatement.setString(i, s);
}
@Override
public Context getResult(ResultSet rs, String columnName) throws SQLException {
System.out.println("自定义类型转换");
String string = rs.getString(columnName);
return JSONObject.parseObject(string, Context.class);
}
@Override
public Context getResult(ResultSet rs, int columnIndex) throws SQLException {
System.out.println("自定义类型转换");
String string = rs.getString(columnIndex);
return JSONObject.parseObject(string, Context.class);
}
@Override
public Context getResult(CallableStatement cs, int columnIndex) throws SQLException {
System.out.println("自定义类型转换");
String string = cs.getString(columnIndex);
return JSONObject.parseObject(string, Context.class);
}
}
package com.Controller;
package com.Controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.Service.UserService;
@RestController
public class Controller {
@Autowired
UserService userService;
@GetMapping("insert")
public void transactionTestWithInsert() {
userService.insert();
}
@GetMapping("select")
public ResponseEntity transactionTestWithSelect() {
return ResponseEntity.ok(userService.findUser().size());
}
}
package com.Domain;
package com.Domain;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
@ToString
@Builder
@Getter
@Setter
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class Context {
public Context() {
}
public Context(String id,String username, String password, String context) {
this.id = id;
this.username = username;
this.password = password;
this.context = context;
}
private String id;
private String username;
private String password;
private String context;
}
\ No newline at end of file
package com.Domain;
package com.Domain;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
@ToString
@Builder
@Getter
@Setter
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class User {
public User() {
}
public User(String id,String username, String password, Context context) {
this.id = id;
this.username = username;
this.password = password;
this.context = context;
}
private String id;
private String username;
private String password;
private Context context;
}
\ No newline at end of file
package com.Mapper;
package com.Mapper;
import java.util.List;
import com.Domain.*;
public interface UserMapper {
public void insert(User user);
public User selectUser(String userName);
public List<User> selectAll();
}
\ No newline at end of file
package com.Service;
package com.Service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import com.Domain.Context;
import com.Domain.User;
import com.Mapper.UserMapper;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
// 脏读
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
public void insert() {
User user = new User();
user.setUsername("user");
user.setPassword("123456");
Context build = Context.builder().id("123456").username("aaa").password("123456")
.context("hello world").build();
user.setContext(build);
userMapper.insert(user);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
throw new RuntimeException();
}
public List<User> findUser() {
return userMapper.selectAll();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD com.Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.Mapper.UserMapper"> <!--mapper -->
<resultMap type="user" id="userList">
<!-- type为返回列表元素的类全名或别名 -->
<result column="id" property="id"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
<result column="context" property="context"
typeHandler="com.Config.MyTypeHandler"/>
</resultMap>
<insert id="insert" parameterType="user">
insert into users(id,username,
password,context) values(#{id}, #{username}, #{password},#{context})
</insert>
<select id="selectUser" parameterType="String" resultType="user">
SELECT * FROM users WHERE username = #{username}
</select>
<select id="selectAll" resultMap="userList">
SELECT * FROM users
</select>
</mapper>
\ No newline at end of file
spring:
spring:
application:
name: Application
profiles:
active: preprodtest
info:
project:
version: 1.0 #project.version# kerberosprod preprod
application:
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD com.Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="defaultStatementTimeout" value="25000"/>
</settings>
<typeHandlers>
<typeHandler handler="com.Config.MyTypeHandler" jdbcType="VARCHAR" javaType="com.Domain.Context"/>
</typeHandlers>
</configuration>
\ No newline at end of file
package transaction;
package transaction;
import java.util.List;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.TransactionIsolationLevel;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.test.context.junit4.SpringRunner;
import com.Application;
import com.Config.AppConfig1;
import com.Domain.Context;
import com.Domain.User;
import com.Mapper.UserMapper;
import com.Service.UserService;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {Application.class})
public class MybatisTest {
private static final AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
AppConfig1.class);
@Autowired
UserService userService;
/**
* 自定义TypeHandler类
*/
@Test
public void test() {
List<User> user = userService.findUser();
System.out.println(user);
}
/**
* Mybatis 批量插入数据库代码
*/
@Test
public void insertOptimistic() {
SqlSessionFactory sqlSessionFactory = context.getBean("sqlSessionFactory", SqlSessionFactory.class);
// sqlSession 开启事务。 ExecutorType.REUSE 保证batch 事务的合理使用,
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH,
TransactionIsolationLevel.READ_COMMITTED);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
for (int i = 1; i < 20; i++) {
User user = new User();
user.setId(String.valueOf(i));
user.setUsername("user" + i);
user.setPassword("123456");
Context build = Context.builder().id(user.getId()).username(user.getUsername()).password(user.getPassword())
.context("context").build();
build.setContext("context:" + i);
user.setContext(build);
mapper.insert(user);
}
// 刷新
sqlSession.flushStatements();
}
}
CREATE TABLE `users` (
CREATE TABLE `users` (
`id` varchar(32) DEFAULT NULL,
`username` varchar(255) DEFAULT NULL,
`password` varchar(32) DEFAULT NULL,
`context` varchar(1000) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment