MyBatis(一) 入門使用和簡單實例

Mybatis是一個著名的輕量級持久層框架。

在這篇文章中,使用Mybatis框架,實現一個簡單的查詢事例。後面的文章中會再詳細介紹其他用法。

首先,需要導入一些使用的jar,包括:mybatis、commons-logging、mysql-connector-java、log4j等。

在pom.xml中添加dependencies(上邊幾個項目的依賴):

<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>com.vip</groupId>
  <artifactId>commons-testing</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>commons-testing</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
 
  <dependencies>
  <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis</artifactId>
	    <version>3.1.1</version>
	</dependency>
 <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>
  <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.30</version>
</dependency>
  
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.6.2</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.6.2</version>
  </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

新建一張表dq_user:

CREATE TABLE `dq_user` (
  `USER_ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶id',
  `OA_ID` varchar(100) DEFAULT '' COMMENT '用戶OA登錄ID',
  `NAME` varchar(60) NOT NULL DEFAULT '' COMMENT '用戶名稱',
  `EMAIL` varchar(60) NOT NULL DEFAULT '' COMMENT '郵件地址',
  `PHONE` varchar(60) NOT NULL DEFAULT '' COMMENT '手機號碼',
  `CREATE_TIME` timestamp NOT NULL DEFAULT '1980-01-01 00:00:00' COMMENT '創建時間',
  `UPDATE_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
  `IS_DELETED` tinyint(4) NOT NULL DEFAULT '0' COMMENT '刪除標識:0默認,1刪除',
  `IS_ADMIN` tinyint(4) NOT NULL DEFAULT '0' COMMENT '管理員標識:0默認,1管理員',
  `IS_ADMIN1` tinyint(4) NOT NULL DEFAULT '0' COMMENT '管理員標識:0默認,1管理員',
  `WEIXIN` varchar(64) NOT NULL DEFAULT '',
  PRIMARY KEY (`USER_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=87 DEFAULT CHARSET=utf8 COMMENT='用戶表';

建一個和表對應的java bean類,根據反射機制,調用set方法來給對象賦值,所以,要保證屬性名稱和表的列字段都相符。同時,生成對應的getter方法、setter方法,並重寫toString()。

DqUser.java

import java.sql.Timestamp;

public class DqUser {
	//根據反射機制,調用set方法來給對象賦值。
	
	private int user_id;
	private String oa_id;
	private String name;
	private String email;
	private String phone;
	private Timestamp create_time;
	private Timestamp update_time;
	private int is_deleted;
	private int is_admin;
	private int is_admin1;
	private String weixin;
	public int getUser_id() {
		return user_id;
	}
	public void setUser_id(int user_id) {
		this.user_id = user_id;
	}
	public String getOa_id() {
		return oa_id;
	}
	public void setOa_id(String oa_id) {
		this.oa_id = oa_id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public Timestamp getCreate_time() {
		return create_time;
	}
	public void setCreate_time(Timestamp create_time) {
		this.create_time = create_time;
	}
	public Timestamp getUpdate_time() {
		return update_time;
	}
	public void setUpdate_time(Timestamp update_time) {
		this.update_time = update_time;
	}
	public int getIs_deleted() {
		return is_deleted;
	}
	public void setIs_deleted(int is_deleted) {
		this.is_deleted = is_deleted;
	}
	public int getIs_admin() {
		return is_admin;
	}
	public void setIs_admin(int is_admin) {
		this.is_admin = is_admin;
	}
	public int getIs_admin1() {
		return is_admin1;
	}
	public void setIs_admin1(int is_admin1) {
		this.is_admin1 = is_admin1;
	}
	public String getWeixin() {
		return weixin;
	}
	public void setWeixin(String weixin) {
		this.weixin = weixin;
	}
	@Override
	public String toString() {
		return "DqUser [user_id=" + user_id + ", oa_id=" + oa_id + ", name=" + name + ", email=" + email + ", phone="
				+ phone + ", create_time=" + create_time + ", update_time=" + update_time + ", is_deleted=" + is_deleted
				+ ", is_admin=" + is_admin + ", is_admin1=" + is_admin1 + ", weixin=" + weixin + "]";
	}
}

建立一個配置文件,在這裏實現2個功能:配置數據源、註冊表的配置文件(xml)。按照規範,命名爲sqlMapConfig.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>
<environments default="development">
	<environment id="development">
	<!-- 在實際項目中,數據庫環境配置,如果和spring整合,就不需要配置,交給spring處理 -->
		<transactionManager type="JDBC"/>     <!-- 事務管理器 -->
		<dataSource type="POOLED">            <!-- 連接數據庫類型:連接池 、非連接池連接-->
			<property name="driver" value="com.mysql.jdbc.Driver"/>
			<property name="url" value="jdbc:mysql://10.199.242.160:3306/vip_ds"/>
			<property name="username" value="ds"/>
			<property name="password" value="admin"/>
		</dataSource>
	</environment>
</environments>

<!-- 每張表的映射文件,管理每張表的映射文件。 規範:按照表名的駝峯模式,最後加個Mapper -->
<!-- resource 引入映射文件,包分割使用/而不是. -->
<mappers>
	<mapper resource="com/vip/mapping/DqUserMapper.xml"/>
</mappers>
</configuration>

該配置文件需要放置在classpath下,下圖是我的工程的目錄結構,當然也可以做相應調整:

wKiom1ey8CyBn3scAABO0I_OYGw165.png-wh_50

下面是Mapper的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.vip.mapping.DsqlUserMapper">
	<select id="selectUser" parameterType="java.lang.Integer" resultType="com.vip.model.DqUser">
	select * from dq_user where user_id = #{id}
	</select>
</mapper>

測試類AppTest.java:

package com.vip.commons_testing;

import static org.junit.Assert.*;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import com.vip.model.DqUser;

public class AppTest {
	
	SqlSessionFactory sqlSessionFactory;
	@Before
	public void before() throws IOException
	{
		InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
	}
	
	@Test
	public void test() {
		SqlSession sqlsession = sqlSessionFactory.openSession();
		//第一個參數找到執行的SQL,命名空間.sqlid   第二個參數
		DqUser du = sqlsession.selectOne("com.vip.mapping.DsqlUserMapper.selectUser", 80);
		System.out.println(du);
		sqlsession.close();
	}

}

執行結果:

DqUser [user_id=80, oa_id=ere, name=ee, [email protected], phone=wr, create_time=2016-05-10 10:11:32.0, update_time=2016-06-01 11:21:59.0, is_deleted=1, is_admin=0, is_admin1=0, weixin=]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章