1、新建一個Maven Project
使用Eclipse自帶的Maven插件,自動創建一個基於Maven的Web工程;(前提是開發環境一定要配置好Maven)

選擇archetype為maven-archetype-webapp:

設置:
GroupId:com.study(正式項目為公司網址倒寫)
ArtifactId:SMPro(項目名稱,[模塊名稱])

2、修復jsp頁面報錯
jsp頁面報錯,因為在構建路徑中沒有javax.servlet.http.HttpServlet,在pom.xml文件中添加servlet依賴包:
| <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <!-- 只在編譯和測試時運行 --> <scope>provided</scope> </dependency> |
3、完善項目目錄結構
在Navigator視圖下,補全目錄結構如下:

右鍵項目-Properties,打開Java Build Path,補全Source下的目錄,並觀察Default output folder是否為***/target/classes目錄;

4、添加該測試項目所需依賴jar包:
| <dependencies> <!-- 使用junit4 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <!-- 只在編譯和測試時運行 --> <scope>provided</scope> </dependency>
<!-- 補全項目依賴 --> <!-- 1:日志 slf4j是規范/接口 日志實現:log4j,logback,common-logging 這里使用:slf4j + log4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.2</version> </dependency> <!-- 2:數據庫相關依賴 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.39</version> <scope>runtime</scope> </dependency> <!-- c3p0數據庫連接池 --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <!-- 3:DAO框架依賴:MyBatis依賴 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> <!-- MyBatis自身實現的spring整合依賴 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.3</version> </dependency> <!-- 4:spring依賴 --> <!-- 1) spring核心依賴--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.7.RELEASE</version> </dependency> <!-- 2) spring dao層依賴--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.1.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.1.7.RELEASE</version> </dependency> </dependencies> |
5、建庫建表
| --創建數據庫 CREATE DATABASE sm_project; USE sm_project; --創建用戶表 CREATE TABLE tb_user( `user_id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '用戶ID', `user_name` VARCHAR(30) COMMENT '用戶名', `user_birthday` DATE COMMENT '用戶生日', `user_salary` DOUBLE COMMENT '用戶工資' )ENGINE=InnoDB DEFAULT CHARSET=UTF8 COMMENT='用戶表'; |
6、創建實體類

| @SuppressWarnings("serial") public class User implements Serializable { private int id; private String name; private Date birthday; private double salary; //setter()/getter()/toString()略 } |
7、定義DAO接口

| public interface IUserDAO { public void insert(User user); public void delete(int id); public void update(User user); public User findById(int id); public List<User> findAll(); } |
8、MyBatis中SQL映射文件:IUserDAO.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"> <!-- 其中命名空間指向與該文件同名的DAO層接口 --> <mapper namespace="com.study.dao.IUserDAO"> <!-- 通過resultMap解決實體類屬性與數據庫字段名不一致的問題 --> <resultMap type="com.study.entity.User" id="userResult"> <!-- 其中id為主鍵,result為普通字段 property對應實體類屬性,column對應字段名(更准確的說應該是查詢結果集中的字段名) --> <id property="id" column="user_id"/> <result property="name" column="user_name"/> <result property="birthday" column="user_birthday"/> <result property="salary" column="user_salary"/> </resultMap> <!-- 插入數據后獲得自增主鍵的值 --> <insert id="insert" keyProperty="id" keyColumn="user_id"> INSERT INTO tb_user (user_name,user_birthday,user_salary) VALUES (#{name},#{birthday},#{salary}) </insert> <!-- 修改用戶內容 --> <update id="update"> UPDATE tb_user SET user_name=#{name}, user_birthday=#{birthday}, user_salary=#{salary} WHERE user_id=#{id} </update> <!-- 根據id刪除用戶 --> <delete id="delete"> DELETE FROM tb_user WHERE user_id=#{id} </delete> <!-- 根據id查詢用戶 --> <select id="findById" resultMap="userResult"> SELECT user_id,user_name,user_birthday,user_salary FROM tb_user WHERE user_id=#{id} </select> <!-- 查詢所有用戶 --> <select id="findAll" resultMap="userResult"> SELECT user_id,user_name,user_birthday,user_salary FROM tb_user </select> </mapper> |
9、MyBatis的配置文件:mybatis-config.xml
雖然后面使用Spring托管MyBatis,但是對於MyBatis的專屬設置還是需要在這里設置;

| <?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> <!-- 使用jdbc的getGeneratedKeys獲取數據庫自增主鍵值 --> <setting name="useGeneratedKeys" value="true"/> <!-- 使用列別名替換列名 默認:true --> <setting name="useColumnLabel" value="true"/> <!-- 開啟駝峰命名轉換 --> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> </configuration> |
10、Spring與MyBatis整合配置文件:spring-mybatis.xml

| <?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"> <!-- 配置整合MyBatis --> <!-- 1:配置數據庫相關參數 properties屬性:${url} --> <context:property-placeholder location="classpath:jdbc.properties" /> <!-- 2:數據庫連接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 配置連接池屬性 --> <property name="driverClass" value="${jdbc.driver}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" />
<!-- c3p0連接池的私有屬性 --> <property name="maxPoolSize" value="${maxPoolSize}" /> <property name="minPoolSize" value="${minPoolSize}" /> <!-- 關閉連接后不自動commit --> <property name="autoCommitOnClose" value="${autoCommitOnClose}" /> <!-- 獲取連接超時時間 --> <property name="checkoutTimeout" value="${checkoutTimeout}" /> <!-- 當獲取連接失敗重試次數 --> <property name="acquireRetryAttempts" value="${acquireRetryAttempts}" /> </bean>
<!-- spring + MyBatis 精華 --> <!-- 約定大於配置 --> <!-- 3:配置SqlSessionFactory對象 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注入數據庫連接池 --> <property name="dataSource" ref="dataSource"/> <!-- 配置MyBatis全局配置文件:mybatis-config.xml --> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!-- 掃描entity包 使用別名 org.asset.entity.User -> User --> <property name="typeAliasesPackage" value="com.study.entity"/> <!-- 掃描sql配置文件:mapper需要的xml文件 --> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean>
<!-- 4:配置掃描DAO接口包,動態實現DAO接口,並注入到spring容器中 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 給出需要掃描DAO接口包 --> <property name="basePackage" value="com.study.dao"/> <!-- 注入sqlSessionFactory --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean>
</beans> |
11、數據庫連接配置文件:jdbc.properties

| #jdbc.properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/sm_project?useUnicode=true&characterEncoding=utf-8 jdbc.username=root jdbc.password=
maxPoolSize=30 minPoolSize=10 autoCommitOnClose=false checkoutTimeout=1000 acquireRetryAttempts=2 |
12、日志配置文件:log4j.properties

| log4j.rootLogger=DEBUG, Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n log4j.logger.java.sql.ResultSet=INFO log4j.logger.org.apache=INFO log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG |
13、測試


| package com.study.dao; import java.util.Date; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.study.entity.User; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({"classpath:spring-mybatis.xml"}) public class IUserDAOTest { private Logger logger = LoggerFactory.getLogger(IUserDAOTest.class); @Autowired private IUserDAO userDAO; @Test public void testInsert() { User user = new User(); user.setBirthday(new Date()); user.setName("James"); user.setSalary(15000.0); this.userDAO.insert(user); logger.info("insert the user={}",user); this.userDAO.delete(user.getId()); User u = this.userDAO.findById(user.getId()); logger.info("after delete the user={}", u); } @Test public void testUpdate() { User user = new User(); user.setBirthday(new Date()); user.setName("Daniel"); user.setSalary(13000.0); logger.info("before update the user={}", user); this.userDAO.insert(user); user.setSalary(22000.0); this.userDAO.update(user); User u = this.userDAO.findById(user.getId()); logger.info("after update the user={}", u); this.userDAO.delete(u.getId()); } @Test public void testFindAll() { List<User> users = this.userDAO.findAll(); logger.info("all the users={}", users); } } |
打印日志結果如下:
| 2017-08-24 15:21:06,805 [main] INFO [com.study.dao.IUserDAOTest] - all the users=[User [id=1, name=John, birthday=Wed Aug 23 00:00:00 CST 2017, salary=10000.0], User [id=2, name=Smith, birthday=Thu Aug 24 00:00:00 CST 2017, salary=20000.0], User [id=4, name=King, birthday=Thu Aug 24 00:00:00 CST 2017, salary=30000.0]] |
| 2017-08-24 15:21:06,818 [main] INFO [com.study.dao.IUserDAOTest] - insert the user=User [id=11, name=James, birthday=Thu Aug 24 15:21:06 CST 2017, salary=15000.0] 2017-08-24 15:21:06,825 [main] INFO [com.study.dao.IUserDAOTest] - after delete the user=null |
| 2017-08-24 15:21:06,834 [main] INFO [com.study.dao.IUserDAOTest] - before update the user=User [id=12, name=Daniel, birthday=Thu Aug 24 00:00:00 CST 2017, salary=13000.0] 2017-08-24 15:21:06,840 [main] INFO [com.study.dao.IUserDAOTest] - after update the user=User [id=12, name=Daniel, birthday=Thu Aug 24 00:00:00 CST 2017, salary=22000.0] |
