1. 程式人生 > >J2ee專案從0搭建(七):整合Mybatis、mybatis-generator程式碼生成、MySQL資料庫

J2ee專案從0搭建(七):整合Mybatis、mybatis-generator程式碼生成、MySQL資料庫

一、思路:Spring整合Mybatis,連線MySQL資料庫,並利用mybatis-generator自動生成Dao、Model、Mapping。

二、pom.xml配置檔案中:<dependencies>中我們需要配置mybatis、mysql-connector-java依賴;並在<build>下的<plugins>標籤中配置mybatis-generator-maven-plugin外掛。

<span style="white-space:pre">		</span><!-- mybatis -->
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis</artifactId>
		    <version>3.4.0</version>
		</dependency>
		<!-- mysql -->
		<dependency>
		    <groupId>mysql</groupId>
		    <artifactId>mysql-connector-java</artifactId>
		</dependency>

<span style="white-space:pre">		</span><plugins>
		<!-- mybatis 程式碼自動生成 -->
			<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.0</version>
			</plugin>
		</plugins>

三、定義好MySQL的資料庫引數:驅動名、地址、使用者名稱、密碼等;我們再src/main/resources下建立application.properties

#mysql database setting
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://xxx.xxx.xxx.xxx:3306/test?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
jdbc.username=root
jdbc.password=xxxxxx

#connection pool settings
jdbc.pool.maxIdle=10
jdbc.pool.maxActive=40

四、還在此目錄下建立spring-mybatis.xml配置檔案,使用<context:property-placeholder>引入上面定義好的屬性配置檔案,並配置一個DataSource bean,mysql就配置好了。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

	<!-- 引入屬性配置檔案 -->
	<context:property-placeholder
		ignore-unresolvable="true" location="classpath*:/application.properties" />

	<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"
		destroy-method="close">
		<!-- 資料庫資訊 -->
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />

		<!-- 連結池資訊:最大活躍數、最大空閒數 -->
		<property name="maxActive" value="${jdbc.pool.maxActive}" />
		<property name="maxIdle" value="${jdbc.pool.maxIdle}" />
		<property name="defaultAutoCommit" value="false" />
		
		<!-- 連線Idle一個小時後超時(配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒) -->
		<property name="timeBetweenEvictionRunsMillis" value="3600000" />
		<property name="minEvictableIdleTimeMillis" value="3600000" />

		<!-- 驗證連線有效與否的SQL,不同的資料配置不同 -->
		<!-- 用來檢測連線是否有效的sql,要求是一個查詢語句。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會其作用。 推薦使用SELECT 1-->
		<property name="validationQuery" value="SELECT 1" />
		<!-- 這裡建議配置為TRUE,防止取到的連線不可用 --> 
		<!-- 申請連線時執行validationQuery檢測連線是否有效,做了這個配置會降低效能。 -->
		<property name="testOnBorrow" value="true" />
		<!-- 歸還連線時執行validationQuery檢測連線是否有效,做了這個配置會降低效能 -->
		<property name="testOnReturn" value="true" />
		<!-- 建議配置為true,不影響效能,並且保證安全性。申請連線的時候檢測,如果空閒時間大於timeBetweenEvictionRunsMillis,執行validationQuery檢測連線是否有效 -->
		<property name="testWhileIdle" value="true" />
	</bean>
</beans>

PS:  這裡的class="org.apache.tomcat.jdbc.pool.DataSource"也可以寫成class="org.apache.commons.dbcp.BasicDataSource"

五、我們用mybatis-generator自動生成Dao、Model、Mapping,所以仍然在此目錄下建立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">
<!-- 在專案根目錄下(pom.xml同級)開啟命令列工具:mvn mybatis-generator:generate -->
<generatorConfiguration>

		<!-- 配置成你本地的mysql-connector-java jar -->
		<classPathEntry
		location="D:\GBJ_learning\Maven\maven\mysql\mysql-connector-java\5.1.21\mysql-connector-java-5.1.21.jar" />
		

	<context id="baseTradeTables" targetRuntime="MyBatis3">
		<commentGenerator>
			<property name="suppressAllComments" value="true" />
		</commentGenerator>
		
		<!-- 資料庫地址、使用者名稱、密碼 -->
		<jdbcConnection driverClass="com.mysql.jdbc.Driver"
			connectionURL="jdbc:mysql://xxx.xxx.xxx.xxx:3306/test" userId="xxx"
			password="xxx">
		</jdbcConnection>

		<javaTypeResolver>
			<property name="forceBigDecimals" value="true" />
		</javaTypeResolver>

		<!-- 後臺生成 -->
		<!-- model -->
		<javaModelGenerator targetPackage="com.spring.demo.model"
			targetProject="src/main/java">
			<property name="enableSubPackages" value="true" />
			<property name="trimStrings" value="true" />
		</javaModelGenerator>
		
		<!-- Mapper對映 -->
		<sqlMapGenerator targetPackage="mybatis"
			targetProject="src/main/resources">
			<property name="enableSubPackages" value="true" />
		</sqlMapGenerator>

		<!-- Mapper介面 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="com.spring.demo.dao" targetProject="src/main/java">
			<property name="enableSubPackages" value="true" />
		</javaClientGenerator>

		<!-- 表 -->
		<table tableName="user" />
	</context>
</generatorConfiguration>

六、mybatis-generator配置好之後,我們就來自動生成一下user表的dao、model、mapping:在專案目錄下(pom.xml)開啟命令列工具,輸入mvn mybatis-generator:generate,第一次的話,如果缺少某些依賴jar的話可能需要花點時間。



七、BUILD SUCCESS之後,重新整理專案後,就能發現自動生成的檔案了。


八、離實際的使用,我們還缺少一些依賴jar和配置:

  • pom.xml中:加入以下依賴
    <dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis-spring</artifactId>
    			<version>1.3.0</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-tx</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    		</dependency>

  • spring-mybatis.xml中,將自動生成的dao和mapping進行配置:
    	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    		<property name="dataSource" ref="dataSource" />
    		<!-- 自動掃描entity目錄, 省掉Configuration.xml裡的手工配置 -->
    		<property name="typeAliasesPackage" value="com.spring.demo.model" />
    		<!-- 顯式指定Mapper檔案位置 -->
    		<property name="mapperLocations" value="classpath:/mybatis/*.xml" />
    	</bean>
    	
    	<!-- 掃描basePackage下所有以@MyBatisRepository標識的 介面 -->
    	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    		<property name="basePackage" value="com.spring.demo.dao" />
    	</bean>

九、測試Spring MVC、Mybatis、MySQL及mybatis-generator自動生成的程式碼是否正確,我們測試從user表中讀取name=li的年紀age是多大。直接上程式碼:

  • AgeController.java
    package com.spring.demo.mvc;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    import com.spring.demo.dao.UserMapper;
    import com.spring.demo.model.User;
    
    @Controller
    @RequestMapping("/mvc")
    public class AgeController {
    	
    	@Autowired
    	private UserMapper userMapper;
    
    	@RequestMapping("/age")
    	public String age(@RequestParam(value = "name", required = false, defaultValue = "World") String name,
    			Model model) {
    		//通過name查詢user物件
    		User user = userMapper.selectByPrimaryKey(name);
    		
    		if(null != user){
    			model.addAttribute("name", user.getName());
    			model.addAttribute("age", user.getAge()+"");
    		}
    		return "/demo/age";
    	}
    }
    

  • age.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Insert title here</title>
    </head>
    <body>
    Hello,name is ${name}, age=${age}!
    </body>
    </html>

  • 效果:
======================================================================================================================

為了便於大家學習,專案將被開源在我的github上: