MyBatis+Spring+Maven的簡單整合Demo

本文主要是示范基于Maven的MyBatis+Spring的簡單使用乓土,其中主要涉及到的是MyBatis的配置使用雏蛮,另外還有部分log4j的配置使用。

項目概述

本文項目是基于MyEclipse俯逾、JDK1.7昆淡、MySQL進行開發(fā)的,主要功能是通過MyBatis實現(xiàn)對User這個Bean類進行增刪改查操作盒件。
先展示下整個項目的結(jié)構(gòu):


此處輸入圖片的描述
此處輸入圖片的描述

新建web project

如圖所示(勾選Maven支持):

此處輸入圖片的描述
此處輸入圖片的描述

一路next蹬碧,勾選產(chǎn)生web.xml

此處輸入圖片的描述
此處輸入圖片的描述

最后生成的項目pom.xml文件中會有很多亂七八糟的<dependency>,可以將他們刪了炒刁,本小項目中暫時用不掉這些恩沽。

準備數(shù)據(jù)庫表

使用mybatis數(shù)據(jù)庫,沒有就新建一個翔始。

use mybatis;

drop table if exists tb_user;
create table tb_user(
    id int primary key auto_increment comment '主鍵',
    username varchar(40) not null unique comment '用戶名',
    password varchar(40) not null comment '密碼',
    email varchar(40) comment '郵件',
    age int  comment '年齡',
    sex char(2) not null comment '性別'
);

相關(guān)的Java處理類

  • 數(shù)據(jù)庫表對應的實體類User.java
    (省略了相關(guān)的getter和setter)
package com.liuhao.entity;

public class User {
    private int id;
    private String username;
    private String password;
    private String sex;
    private String email;
    private int age;

    //getter() and  setter () 
}
  • UserDao.java罗心,可以對User進行插入里伯、更新、刪除渤闷、查找疾瓮、列出所有等操作:
package com.liuhao.dao;
import java.util.List;
import com.liuhao.entity.User;

public interface UserDao {
    public int insert(User user);
    public int update(User user);
    public int delete(String userName);
    public List<User> selectAll();
    public int countAll();
    public User findByUserName(String userName);
}
  • UserService接口:
package com.liuhao.service;
import java.util.List;
import com.liuhao.entity.User;

public interface UserService {
.   public int insert(User user);
    public int update(User user);
    public int delete(String userName);
    public List<User> selectAll();
    public int countAll();
    public User findByUserName(String userName);
}
  • 實現(xiàn)service接口,執(zhí)行dao操作:
package com.liuhao.service.impl;
import java.util.List;
import com.liuhao.dao.UserDao;
import com.liuhao.entity.User;
import com.liuhao.service.UserService;

public class UserServiceImpl implements UserService {

    public UserDao userDao;
    public UserDao getUserDao() {
        return userDao;
    }
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public int insert(User user) {
        return userDao.insert(user);
    }

    @Override
    public int update(User user) {
        return userDao.update(user);
    }

    @Override
    public int delete(String userName) {
        return userDao.delete(userName);
    }

    @Override
    public List<User> selectAll() {
        return userDao.selectAll();
    }

    @Override
    public int countAll() {
        return userDao.countAll();
    }

    @Override
    public User findByUserName(String userName) {
        return userDao.findByUserName(userName);
    }
}

相關(guān)配置文件

  • Mapper文件配置/test/config/com/liuhao/dao/UserDao.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.liuhao.dao.UserDao">
    <!-- 查詢表中記錄總數(shù) -->
    <select id="countAll" resultType="int">
        select count(*) c from tb_user
    </select>

    <!-- 查詢表中的所有用戶 -->
    <select id="selectAll" resultType="com.liuhao.entity.User">
        select * from tb_user order by
        username asc
    </select> 

    <!-- 向數(shù)據(jù)庫中插入用戶 -->
    <insert id="insert"   parameterType="com.liuhao.entity.User">
        insert into
        tb_user(username,password,email,sex,age)
        values(#{username},#{password},#{email},#{sex},#{age})
    </insert>

    <!-- 更新庫中的用戶 -->
    <update id="update" parameterType="com.liuhao.entity.User">
        update tb_user set
        username=#{username},password=#{password},email=#{email},sex=#{sex},age=#{age}
        where username=#{username}
    </update>

    <!-- 刪除用戶 -->
    <delete id="delete" parameterType="String">    
        delete from tb_user where username=#{username}
    </delete>

    <!-- 根據(jù)用戶名查找用戶 -->
    <select id="findByUserName" parameterType="String"
        resultType="com.liuhao.entity.User"> 
        select * from tb_user where username=#{username}
    </select>

</mapper>
  • Mybatis應用配置文件/test/config/MyBatis-Configuration.xml:
<?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>
    <mappers>
        <mapper resource="com/liuhao/dao/UserDao.xml"/>
    </mappers>
</configuration>
  • Spring配置文件,本例中我們放在/test/config/applicationContext.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:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <!-- 配置數(shù)據(jù)源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis"></property>
        <property name="username" value="root"></property>
        <property name="password" value="123456"></property>
    </bean>
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation" value="classpath:MyBatis-Configuration.xml"></property>
        <property name="dataSource" ref="dataSource" />
    </bean>
    <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="mapperInterface" value="com.liuhao.dao.UserDao"></property>
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
    </bean>
    <bean id="userService" class="com.liuhao.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
    </bean>
</beans>
  • web.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>test</display-name>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

    <!-- 配置上下文監(jiān)聽 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>
  • 項目是基于Maven構(gòu)建的肤晓,pom.xml
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>test</groupId>
    <artifactId>test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>test</name>
    <description />
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.2.2</version>
        </dependency>
        <!-- mybatis和spring相關(guān) -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-dao</artifactId>
            <version>2.0.5</version>
        </dependency>
        <!-- MySQL數(shù)據(jù)庫驅(qū)動 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.5</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <!-- JUnit測試框架 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!-- log4j日志框架 -->
        <dependency>
            <groupId>org.apache.directory.studio</groupId>
            <artifactId>org.apache.logging.log4j</artifactId>
            <version>1.2.16</version>
        </dependency>
    </dependencies>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <resources>
            <resource>
                <directory>src</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <warSourceDirectory>${basedir}/WebRoot</warSourceDirectory>
                    <version>3.0</version>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
  • 另外項目中使用了log4j進行日志采集爷贫,配置如下:
#log4j.rootLogger=DEBUG,CONSOLE,A1
#log4j.rootLogger=INFO,CONSOLE,A2
log4j.rootLogger=DEBUG,INFO,CONSOLE,A1,A2,A3

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %c %-5p %m%n

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=D:/logs/debug.log
log4j.appender.A1.Threshold=INFO
log4j.appender.A1.ImmediateFlush=true
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %-25c -> %m%n

log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.File=D:/logs/log.log
log4j.appender.A2.Threshold=INFO
log4j.appender.A2.ImmediateFlush=true
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %-25c -> %m%n

log4j.appender.A3=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A3.File=D:/logs/error.log
log4j.appender.A3.Threshold=ERROR
log4j.appender.A3.ImmediateFlush=true
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %-5p %-25c -> %m%n

log4j.logger.com.springframework=DEBUG
log4j.logger.com.ibatis=DEBUG  
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG  
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG  
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG  
log4j.logger.java.sql.Connection=DEBUG  
log4j.logger.java.sql.Statement=DEBUG  
log4j.logger.java.sql.PreparedStatement=DEBUG  
log4j.logger.java.sql.ResultSet=DEBUG

測試代碼

如果按照上述代碼進行部署,應該不會出問題补憾。本人應為少加了MySQL的驅(qū)動漫萄,和同事搞了差不多一個上午。盈匾。腾务。

  • 基于JUnit的測試代碼:
package com.liuhao.test;

import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.liuhao.entity.User;
import com.liuhao.service.UserService;

public class TestMyBatis {

    ApplicationContext context = null;
    UserService userService = null;

    @Before
    public void initContext() {
        this.context = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        this.userService = (UserService) context.getBean("userService");
    }

    @Test
    public void TestInsert() {
        User user = new User();
        // username需要是唯一的
        user.setUsername("劉哈哈");
        user.setPassword("passtest");
        user.setEmail("liuhao2995@163.com");
        user.setSex("男");
        user.setAge(23);
        userService.insert(user);
    }

    @Test
    public void TestCountAll() {
        System.out.println("數(shù)據(jù)庫中的記錄條數(shù):" + userService.countAll());
    }

    @Test
    public void TestSelectAll() {
        List<User> list = userService.selectAll();
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            System.out.println("用戶名:" + user.getUsername() + "\t密碼:"
                    + user.getPassword() + "\t郵箱:" + user.getEmail());
        }
    }

    @Test
    public void TestFindByName() {
        User user = userService.findByUserName("劉哈哈");
        System.out.println("用戶名:" + user.getUsername() + "\t密碼:"
                + user.getPassword() + "\t郵箱:" + user.getEmail());

    }

    @Test
    public void TestUpdate() {
        User user = new User();
        user.setUsername("劉哈哈");
        user.setPassword("xxxxxxxx");
        user.setEmail("xxxxxx@163xxx");
        user.setSex("男");
        user.setAge(23);
        userService.update(user);
    }

    @Test
    public void TestDelete() {
        userService.delete("劉哈哈");
    }
}

如果覺得有用,歡迎關(guān)注我的微信削饵,有問題可以直接交流:

你的關(guān)注是對我最大的鼓勵岩瘦!
你的關(guān)注是對我最大的鼓勵!

源碼下載:http://download.csdn.net/detail/bruce_6/8876565
參考:http://www.cnblogs.com/dennisit/archive/2013/04/10/3012972.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窿撬,一起剝皮案震驚了整個濱河市启昧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌劈伴,老刑警劉巖密末,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異跛璧,居然都是意外死亡严里,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門追城,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刹碾,“玉大人,你說我怎么就攤上這事座柱∶灾模” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵色洞,是天一觀的道長戏锹。 經(jīng)常有香客問我,道長锋玲,這世上最難降的妖魔是什么景用? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上伞插,老公的妹妹穿的比我還像新娘割粮。我一直安慰自己,他們只是感情好媚污,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布舀瓢。 她就那樣靜靜地躺著,像睡著了一般耗美。 火紅的嫁衣襯著肌膚如雪京髓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天商架,我揣著相機與錄音堰怨,去河邊找鬼。 笑死蛇摸,一個胖子當著我的面吹牛备图,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赶袄,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼揽涮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了饿肺?” 一聲冷哼從身側(cè)響起蒋困,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎敬辣,沒想到半個月后雪标,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡购岗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年汰聋,在試婚紗的時候發(fā)現(xiàn)自己被綠了门粪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喊积。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖玄妈,靈堂內(nèi)的尸體忽然破棺而出乾吻,到底是詐尸還是另有隱情,我是刑警寧澤拟蜻,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布绎签,位于F島的核電站,受9級特大地震影響酝锅,放射性物質(zhì)發(fā)生泄漏诡必。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望爸舒。 院中可真熱鬧蟋字,春花似錦、人聲如沸扭勉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涂炎。三九已至忠聚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唱捣,已是汗流浹背两蟀。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留震缭,地道東北人垫竞。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像蛀序,于是被迫代替她去往敵國和親欢瞪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容