mybatis學習筆記(一) 項目搭建,helloworld實例

Mybatis博客推薦  http://limingnihao.iteye.com/blog/781671


前言:之前一直使用hibernate在作爲數據層的持久化框架,也用過mybatis,但是覺得要寫的sql太多很麻煩, 所以使用的不多 。 現在數據層使用的是mybatis,前端mvc框架用的是他們自己研發的webx3框架,所以決定研究一下這兩個框架。 首先研究mybatis

 ,學習教程是官方的《MyBatis-3-User-Guide-Simplified-Chinese》,去mybatis官網就能下載。 可能會分爲十章左右,項目文件在文章最後能夠下載

有時間再繼續寫一套webx3的學習筆記。

本次學習以代碼實例爲主,不會研究的太深入。 寫這個筆記主要是爲了讓自己儘快熟悉mybatis並且方便以後複習 。 順便提供給想簡單學習mybatis的同學參考。

新建項目(我使用的是maven項目)mybatis-study-01

一、加入mybatis與mysql-connector依賴包到pom文件

<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>mybatis</groupId>
  <artifactId>mybatis-study-01</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>mybatis-01</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>  

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
    
    <dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.2.3</version>
	</dependency>
	
	<dependency> 
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.27</version>
	</dependency>
            
	    
  </dependencies>
</project>


二、創建數據庫mybatis-test

新建一張user表用於測試。建表sql如下:

CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
  `password` varchar(255) default NULL,
  `user_name` varchar(50) default NULL,
  `user_age` int(11) default NULL,
  `user_address` varchar(200) default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `userName` (`user_name`)
) EN

插入一條數據

INSERT INTO `user` VALUES ('1', '123131', 'summer', '100', 'shanghai,pudong');


三、在項目中編寫pojo對象。

package com.zf.mybatis.pojo;

public class User {

	private int id;
	private String password ;
	private String userName;
	private String userAge;
	private String userAddress;

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserAge() {
		return userAge;
	}
	public void setUserAge(String userAge) {
		this.userAge = userAge;
	}
	public String getUserAddress() {
		return userAddress;
	}
	public void setUserAddress(String userAddress) {
		this.userAddress = userAddress;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}

}

四、編寫pojo對應的映射文件User.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.zf.mybatis.pojo.UserMapper">

	<!-- 使用sql標籤可以將公共的sql提取出來複用 -->
	<sql id="queryFields">
	  id , password , user_name as userName , user_age as userAge , user_address as userAddress
	</sql>
	
    <select id="selectByID" parameterType="int" resultType="User">
        select 
        <include refid="queryFields"/> 
        from `user` where id = #{id}
    </select>
    
    <insert id="add" parameterType="User" useGeneratedKeys="true" keyProperty="id" >
    	insert into `user`
    	(password , user_name , user_age , user_address)
    	values(#{password} , #{userName} , #{userAge} , #{userAddress} )
    </insert>
    
    <update id="update" parameterType="User" >
		update `user`
		set password = #{password} , user_name = #{userName}, user_age = #{userAge}, user_address =  #{userAddress}
		where id = #{id}
    </update>
    
    <delete id="deleteById" parameterType="int">
    	delete from `user` where id = #{id}
    </delete>
 
    
</mapper>


注意:上面的namespace的值爲com.zf.mybatis.pojo.UserMapper,可以自定義 ,UserMapper不是一個類,不需要存在的。 

另外,mybatis會將從數據庫查詢出來的記錄根據列名與pojo中的字段進行匹配, 所以上面的user_name,user_age ,user_address這幾個字段都取了別名,跟pojo中的字段相對應。 如果不起別名, 查詢出來的對象,這幾個字段是沒有值的。


五、編寫mybatis的配置文件mybatis-config.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>

  <!-- 配置別名 -->
  <typeAliases> 
       <typeAlias alias="User" type="com.zf.mybatis.pojo.User"/> 
   </typeAliases> 	

  <!-- 數據庫配置信息 -->
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis-test"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
  
  <!-- 映射文件 -->
  <mappers>
    <mapper resource="conf/User.xml"/>
  </mappers>
</configuration>
在該配置文件中配置了數據庫的鏈接方式,以及註冊所有的映射文件,還可以設置mybatis的一些參數。


現在就可以編寫測試類了。來測試一下。

package com.zf.mybatis;

import java.io.IOException;
import java.io.Reader;

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.zf.mybatis.pojo.User;

public class TestMyBatis {
	
	private  SqlSessionFactory sqlSessionFactory;
	private  Reader reader; 

	@Before
	public void init(){
		try {
			reader  = Resources.getResourceAsReader("mybatis-config.xml");
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void testQueryUser(){
		SqlSession session = sqlSessionFactory.openSession();
		try {
			User user = (User) session.selectOne("com.zf.mybatis.pojo.UserMapper.selectByID" ,1);
			System.out.println(user.getUserAddress());
			System.out.println(user.getUserName());
		} finally {
			session.close();
		}
	}
	
	@Test
	public void testInsertUser(){
		SqlSession session = sqlSessionFactory.openSession();
		try {
			User user = new User() ;
			user.setUserName("abcde");
			user.setUserAge(15) ;
			user.setUserAddress("hangzhou/zhejiang");
			user.setPassword("123456");
			//返回值是記錄條數
			int resultCount = session.insert("com.zf.mybatis.pojo.UserMapper.add", user );
			session.commit() ;
			System.out.printf("userID:%d,總記錄條數:%d" , user.getId() , resultCount);  //獲取插入對象的id
		} finally {
			session.close();
		}
	}
	
	@Test
	public void testUpdateUser(){
		SqlSession session = sqlSessionFactory.openSession();
		try {
			User user = new User() ;
			user.setId(5) ;
			user.setUserName("updateName");
			user.setUserAge(101) ;
			user.setUserAddress("shenzhen/guangdong");
			user.setPassword("000000");
			//返回值是修改條數
			int updateCount = session.update("com.zf.mybatis.pojo.UserMapper.update", user );
			session.commit() ;
			System.out.printf("修改條數:%d" ,updateCount);  
		} finally {
			session.close();
		}
	}
	
	@Test
	public void testDelete(){
		SqlSession session = sqlSessionFactory.openSession();
		try {
			//返回值是刪除條數
			int deleteCount = session.update("com.zf.mybatis.pojo.UserMapper.deleteById", 4 );
			session.commit() ;
			System.out.printf("刪除條數:%d" ,deleteCount );  
		} finally {
			session.close();
		}
	}
	
	
	
	
	

}


運行testQueryUser結果如下:

shanghai,pudong
summer
到此,一個mybatis的helloworld類型的小程序就出來了。


下載項目文件 mybatis-study-01.zip






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