你是否厭倦了每次用mybatis都要寫一大堆配置文件?是否厭倦每一個sql操作都要寫一大堆東西?好,厭倦就對了,這裏獻上快速生成方法。
首先數據庫得先來一個。
一、建庫建表
id | name | age |
---|---|---|
1342424252353 | xyh | 22 |
create database testDB;
use testDB;
create table test(id varchar(20) primary key,name varchar(10) not null default '',age tinyint not null default 0);
二、配置pom.xml文件
這裏需要引入mybatis-generator-maven-plugin插件,用於快速生成。
<mybatis_generator_version>1.3.2</mybatis_generator_version>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>${mybatis_generator_version}</version>
</dependency>
<build>
<finalName>UserServer</finalName>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
三、generator.xml配置文件
這個配置文件主要配置數據庫的連接,生成文件所存放位置,生成java類名,對應那個數據庫表。
- classPathEntry標籤需要配置你本地mysql驅動所在jar包路徑。
- jdbcConnection標籤需要配置服務器地址和數據庫登錄賬戶和密碼。
- javaModelGenerator標籤需要配置生成model存放包路徑,model即對應數據庫字段生成的java bean。
- sqlMapGenerator標籤需要配置mapperxml文件存放路徑。
- javaClientGenerator標籤需要配置dao接口存放包路徑。
- 最後table標籤的tableName屬性填對應數據庫表名,domainObjectName屬性填生成model的類名。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 數據庫驅動-->
<classPathEntry location="C:\java\mavaen\repository\mysql\mysql-connector-java\5.1.36\mysql-connector-java-5.1.36.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自動生成的註釋 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--數據庫鏈接URL,用戶名、密碼 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://192.168.1.138:3306/testDB?characterEncoding=utf-8" userId="root" password="12345">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置-->
<javaModelGenerator targetPackage="com.xyh.model" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成映射文件的包名和位置-->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.xyh.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成哪些表-->
<table tableName="test"
domainObjectName="Test"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false"></table>
</context>
</generatorConfiguration>
四、運行快速生成
兩種生成方式:
1、配置使用maven執行
在運行配置中添加maven,maven中配置Working directory:C:/idea_workspace/UserServer
配置command line:mybatis-generator:generate -e
執行該maven插件即可生成xml、model、mapper在相應設置的目錄
2、main方法執行
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) throws Exception{
List<String> warnings = new ArrayList<>();
boolean overwrite = true;
File configFile = new File(ClassLoader.getSystemResource("mybatis_generation.xml").toURI());
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
}
}
生成成功後,會發現相應文件夾多了我們厭倦寫的文件!後面需要使用對應的sql操作,只需在生成的接口中使用註解寫sql就行了,是不是很方便?
五、生成產品
1、TestMapper(接口)
package com.xyh.mapper;
import com.xyh.model.Test;
public interface TestMapper {
int deleteByPrimaryKey(String id);
int insert(Test record);
int insertSelective(Test record);
Test selectByPrimaryKey(String id);
int updateByPrimaryKeySelective(Test record);
int updateByPrimaryKey(Test record);
}
2、Test(model)
package com.xyh.model;
public class Test {
private String id;
private String name;
private Byte age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id == null ? null : id.trim();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Byte getAge() {
return age;
}
public void setAge(Byte age) {
this.age = age;
}
}
3、TestMapper.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.xyh.mapper.TestMapper" >
<resultMap id="BaseResultMap" type="com.xyh.model.Test" >
<id column="id" property="id" jdbcType="VARCHAR" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="age" property="age" jdbcType="TINYINT" />
</resultMap>
<sql id="Base_Column_List" >
id, name, age
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
<include refid="Base_Column_List" />
from test
where id = #{id,jdbcType=VARCHAR}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
delete from test
where id = #{id,jdbcType=VARCHAR}
</delete>
<insert id="insert" parameterType="com.xyh.model.Test" >
insert into test (id, name, age
)
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=TINYINT}
)
</insert>
<insert id="insertSelective" parameterType="com.xyh.model.Test" >
insert into test
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="id != null" >
id,
</if>
<if test="name != null" >
name,
</if>
<if test="age != null" >
age,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="id != null" >
#{id,jdbcType=VARCHAR},
</if>
<if test="name != null" >
#{name,jdbcType=VARCHAR},
</if>
<if test="age != null" >
#{age,jdbcType=TINYINT},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.xyh.model.Test" >
update test
<set >
<if test="name != null" >
name = #{name,jdbcType=VARCHAR},
</if>
<if test="age != null" >
age = #{age,jdbcType=TINYINT},
</if>
</set>
where id = #{id,jdbcType=VARCHAR}
</update>
<update id="updateByPrimaryKey" parameterType="com.xyh.model.Test" >
update test
set name = #{name,jdbcType=VARCHAR},
age = #{age,jdbcType=TINYINT}
where id = #{id,jdbcType=VARCHAR}
</update>
</mapper>
看到了吧,什麼東西都幫我們生成了,一些基本的操作完全不需要我們自己寫了,若要加入什麼sql操作只要用註解在接口中加就行了,例:
package com.xyh.mapper;
import com.xyh.model.Test;
import org.apache.ibatis.annotations.Delete;
public interface TestMapper {
int deleteByPrimaryKey(String id);
int insert(Test record);
int insertSelective(Test record);
Test selectByPrimaryKey(String id);
int updateByPrimaryKeySelective(Test record);
int updateByPrimaryKey(Test record);
@Delete("delete from test where name = #name")
int deleteByName(String name);
}
六、spring配置sqlSessionFactory
注入數據源依賴和mapperLocations依賴,mapperLocations爲生成的mapper.xml文件所在目錄,亦可把所有xml文件import到mybatis_config.xml,然後把該配置文件路徑注入到configLocation。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" ></property>
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
<!--<property name="configLocation" value="classpath:mybatis_config.xml"/>-->
</bean>
七、spring配置mapper掃描器
三種方式:
<!-- ps:當數據源使用讀配置文件值方式設置properties時,會報錯。 -->
<!-- 使用SqlSessionTemplate方式 -->
<bean id="simpleSqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
<constructor-arg index="1" value="SIMPLE"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xyh.mapper"/>
<property name="sqlSessionTemplateBeanName" value="simpleSqlSession"/>
</bean>
<!-- 使用SqlSessionFactory方式 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xyh.mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
<!-- 單數據源方式 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xyh.mapper"/>
<property name="sqlSessionTemplateBeanName" value="simpleSqlSession"/>
</bean>
結尾:好了,到這裏基本完成了,祝大家使用愉快!