目的:java
MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。mysql
MyBatis 避免了幾乎全部的 JDBC 代碼和手動設置參數以及獲取結果集。web
MyBatis 能夠使用簡單的 XML 或註解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java對象)映射成數據庫中的記錄。sql
一、建立maven工程數據庫
二、導入相關pom依賴apache
三、Mybatis相關插件安裝api
Free mybatis pluginsession
Mybatis generatermybatis
mybatis toolsmvc
maven helper
四、Mybatis.cfg.xml配置
Pom.xml依賴
<?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/maven-v4_0_0.xsd"> <parent> <artifactId>module</artifactId> <groupId>com.huangting</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <packaging>war</packaging> <name>mybatis</name> <artifactId>mybatis</artifactId> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <!-- ********************** junit單元測試依賴 ********************** --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- ********************** Java Servlet API ********************** --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.0</version> <scope>provided</scope> </dependency> <!-- ********************** Mybatis依賴 ********************** --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!-- ********************** Mysql JDBC驅動 ********************** --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.44</version> </dependency> <!-- ********************** 日誌配置 ********************** --> <!--記得修改mybatis.cfg.xml添加以下內容--> <!--<setting name="logImpl" value="LOG4J2"/>--> <!--核心log4j2jar包--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.9.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.9.1</version> </dependency> <!--web工程須要包含log4j-web,非web工程不須要--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <version>2.9.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> <build> <resources> <!--解決mybatis-generator-maven-plugin運行時沒有將XxxMapper.xml文件放入target文件夾的問題--> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <!--解決mybatis-generator-maven-plugin運行時沒有將jdbc.properites文件放入target文件夾的問題--> <resource> <directory>src/main/resources</directory> <includes> <include>jdbc.properties</include> <include>*.xml</include> </includes> </resource> </resources> <pluginManagement> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <dependencies> <!--使用Mybatis-generator插件不能使用過高版本的mysql驅動 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.44</version> </dependency> </dependencies> <configuration> <overwrite>true</overwrite> </configuration> </plugin> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.7</version> <configuration> <connectors> <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> <port>8888</port> <maxIdleTime>30000</maxIdleTime> </connector> </connectors> <webAppSourceDirectory>${project.build.directory}/${pom.artifactId}-${pom.version} </webAppSourceDirectory> <contextPath>/</contextPath> </configuration> </plugin> </plugins> </pluginManagement> </build> </project>
Jdbc.properties 鏈接數據庫配置文件
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/t224?useUnicode=true&characterEncoding=UTF-8 jdbc.username=root jdbc.password=613613
接下來安裝如下插件
<?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="jdbc.properties"/> <settings> <setting name="logImpl" value="LOG4J2"/> </settings> <!-- 別名 --> <typeAliases> <!--<typeAlias type="com.huangting.model.Book" alias="Book"/>--> </typeAliases> <!-- 配置mybatis運行環境 --> <environments default="development"> <environment id="development"> <!-- type="JDBC" 表明使用JDBC的提交和回滾來管理事務 --> <transactionManager type="jdbc"/> <!-- mybatis提供了3種數據源類型,分別是:POOLED,UNPOOLED,JNDI --> <!-- POOLED 表示支持JDBC數據源鏈接池 --> <!-- UNPOOLED 表示不支持數據源鏈接池 --> <!-- JNDI 表示支持外部數據源鏈接池 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <!--<mapper resource="com/haungting/mapper/BookMapper.xml"/>--> </mappers> </configuration>
配置generatorConfig.xml
<?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> <!-- 引入配置文件 --> <properties resource="jdbc.properties"/> <!--指定數據庫jdbc驅動jar包的位置--> <classPathEntry location="E:\Maven\Maven_cang\mysql\mysql-connector-java\5.1.44\mysql-connector-java-5.1.44.jar"/> <!-- 一個數據庫一個context --> <context id="infoGuardian"> <!-- 註釋 --> <commentGenerator> <property name="suppressAllComments" value="true"/><!-- 是否取消註釋 --> <property name="suppressDate" value="true"/> <!-- 是否生成註釋代時間戳 --> </commentGenerator> <!-- jdbc鏈接 --> <jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/> <!-- 類型轉換 --> <javaTypeResolver> <!-- 是否使用bigDecimal, false可自動轉化如下類型(Long, Integer, Short, etc.) --> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 01 指定javaBean生成的位置 --> <!-- targetPackage:指定生成的model生成所在的包名 --> <!-- targetProject:指定在該項目下所在的路徑 --> <javaModelGenerator targetPackage="com.huangting.model" targetProject="src/main/java"> <!-- 是否容許子包,即targetPackage.schemaName.tableName --> <property name="enableSubPackages" value="false"/> <!-- 是否對model添加構造函數 --> <property name="constructorBased" value="true"/> <!-- 是否針對string類型的字段在set的時候進行trim調用 --> <property name="trimStrings" value="false"/> <!-- 創建的Model對象是否 不可改變 即生成的Model對象不會有 setter方法,只有構造方法 --> <property name="immutable" value="false"/> </javaModelGenerator> <!-- 02 指定sql映射文件生成的位置 --> <sqlMapGenerator targetPackage="com.huangting.mapper" targetProject="src/main/java"> <!-- 是否容許子包,即targetPackage.schemaName.tableName --> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <!-- 03 生成XxxMapper接口 --> <!-- type="ANNOTATEDMAPPER",生成Java Model 和基於註解的Mapper對象 --> <!-- type="MIXEDMAPPER",生成基於註解的Java Model 和相應的Mapper對象 --> <!-- type="XMLMAPPER",生成SQLMap XML文件和獨立的Mapper接口 --> <javaClientGenerator targetPackage="com.huangting.mapper" targetProject="src/main/java" type="XMLMAPPER"> <!-- 是否在當前路徑下新加一層schema,false路徑com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] --> <property name="enableSubPackages" value="false"/> </javaClientGenerator> <!-- 配置表信息 --> <!-- schema即爲數據庫名 --> <!-- tableName爲對應的數據庫表 --> <!-- domainObjectName是要生成的實體類 --> <!-- enable*ByExample是否生成 example類 --> <!--<table schema="" tableName="t_book" domainObjectName="Book"--> <!--enableCountByExample="false" enableDeleteByExample="false"--> <!--enableSelectByExample="false" enableUpdateByExample="false">--> <!--<!– 忽略列,不生成bean 字段 –>--> <!--<!– <ignoreColumn column="FRED" /> –>--> <!--<!– 指定列的java數據類型 –>--> <!--<!– <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> –>--> <!--</table>--> <table schema="" tableName="t_mvc_book" domainObjectName="Book" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false" enableUpdateByExample="false"> <!-- 忽略列,不生成bean 字段 --> <!-- <ignoreColumn column="FRED" /> --> <!-- 指定列的java數據類型 --> <!-- <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> --> </table> </context> </generatorConfiguration>
配置maven運行generator命令
從這裏面去配置maven
mybatis-generator:generate -e

而後點擊運行,自動生成文件

SessionUtil.java
package com.huangting.util; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; /** * @author 黃大娘 * @company dogson有限公司 * @create 2019-09-20 5:05 */ public class SessionUtil { private static SqlSessionFactory sessionFactory; private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>(); static { sessionFactory = new SqlSessionFactoryBuilder().build(SessionUtil.class.getResourceAsStream("/mybatis.cfg.xml")); } public static SqlSession openSession() { SqlSession session = threadLocal.get(); if (null == session) { session = sessionFactory.openSession(); threadLocal.set(session); } return session; } public static void main(String[] args) { SqlSession session = openSession(); System.out.println(session.getConnection()); session.close();//關閉session // System.out.println(session.getConnection()); } }
BookService.java
package com.huangting.service; import com.huangting.model.Book; /** * @author 黃大娘 * @company dogson有限公司 * @create 2019-09-20 5:08 */ public interface Bookservice { int deleteByPrimaryKey(Integer bid); int insert(Book record); int insertSelective(Book record); Book selectByPrimaryKey(Integer bid); int updateByPrimaryKeySelective(Book record); int updateByPrimaryKey(Book record); }
BookServiceImpl.java
package com.huangting.service.ipml; import com.huangting.mapper.BookMapper; import com.huangting.model.Book; import com.huangting.service.Bookservice; /** * @author 黃大娘 * @company dogson有限公司 * @create 2019-09-20 5:12 */ public class BookServiceImpl implements Bookservice { private BookMapper bookMapper; public BookMapper getBookMapper() { return bookMapper; } public void setBookMapper(BookMapper bookMapper) { this.bookMapper = bookMapper; } @Override public int deleteByPrimaryKey(Integer bid) { return bookMapper.deleteByPrimaryKey(bid); } @Override public int insert(Book record) { return bookMapper.insert(record); } @Override public int insertSelective(Book record) { return bookMapper.insertSelective(record); } @Override public Book selectByPrimaryKey(Integer bid) { return bookMapper.selectByPrimaryKey(bid); } @Override public int updateByPrimaryKeySelective(Book record) { return 0; } @Override public int updateByPrimaryKey(Book record) { return 0; } }
BookServiceImplTest.java
package com.huangting.test; import com.huangting.mapper.BookMapper; import com.huangting.model.Book; import com.huangting.service.Bookservice; import com.huangting.service.ipml.BookServiceImpl; import com.huangting.util.SessionUtil; import org.apache.ibatis.session.SqlSession; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * @author 黃大娘 * @company dogson有限公司 * @create 2019-09-20 5:14 */ public class BookServiceImplTest { private Bookservice bookService; private SqlSession sqlSession; @Before public void setUp() throws Exception { BookServiceImpl bookServiceImpl = new BookServiceImpl(); sqlSession = SessionUtil.openSession(); bookServiceImpl.setBookMapper(sqlSession.getMapper(BookMapper.class)); this.bookService = bookServiceImpl; } @After public void tearDown() throws Exception { sqlSession.commit(); sqlSession.close(); } @Test public void insert() { Book book = new Book(); book.setBname("zzz"); book.setPrice(12.3); book.setBid(5); int insert = bookService.insert(book); } @Test public void selectByPrimaryKey() { Book book = this.bookService.selectByPrimaryKey(66); System.out.println(book); } }
效果:
查詢
新增: