使用Eclipse,Maven簡單搭建Spring+MyBatis


 

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]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM