MyBatis基於Maven的入門

主要內容以下: java

  1. myBatis在maven中的配置  
  2. myBatis在工程中的config配置文件
  3. myBatis爲Bean和表的映射文件
  4. myBatis基本的使用 

 

  • myBatis在maven中的配置,在pom.xml中增長內容

         1. 增長依賴 , mybatis的,還有mysql的驅動的,servlet的, 以及junit的mysql

<dependency>            <!-- mybatis的依賴 -->
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.8</version>
		</dependency>
<dependency>       <!-- mysql的驅動的依賴 -->
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.6</version>
		</dependency>
<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.0.1</version>
			<scope>provided</scope> <!-- 只在編譯時和測試時運行的依賴 -->
		</dependency>
<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>

            2.增長插件sql

<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.2</version>
				<configuration>
					<verbose>true</verbose>
					<overwrite>true</overwrite>
				</configuration>
			</plugin>

 

  • myBatis在工程中的config配置文件,在java代碼的根目錄下建立mybatis-config.xml

         1. jdbc須要的配置文件:數據庫

username=wxn
password=wxn123
url=jdbc:mysql://localhost:3306/simple_shop
driver=com.mysql.jdbc.Driver

         2. mybatis-config.xml的內容則以下:apache

<?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">
	
	<!--  1. 配置數據庫的配置 -->
<configuration>
	<properties resource="jdbc.properties" />
	<typeAliases> <!-- 這一條配置必須在properties和settings配置以後 -->
         <!--爲bean的映射文件中的入參出參指定別名,則入參能夠不用輸入類的全名稱了 -->
		 <typeAlias type="cn.feezu.wxn.domain.User" alias="User"/>
	</typeAliases>
	<environments default="development">  <!-- 環境能夠配置多個,以便不一樣須要時能夠任意切換 -->
		<environment id="development">
			<!--  事務管理 -->
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="${driver}"/>
				<property name="url" value="${url}"/>
				<property name="username" value="${username}"/>
				<property name="password" value="${password}"/>
			</dataSource>
		</environment>
	</environments>	
	<mappers>  <!-- 指定映射文件的路徑位置 -->
		<mapper resource="cn/feezu/wxn/domain/User.xml"/>
	</mappers>
</configuration>
  •  myBatis爲Bean和表的映射文件

        1.假設已經建立了一個javabean 爲Userapi

package cn.feezu.wxn.domain;

import java.util.List;

public class User {
	private int id;
	private String username;
	private String password;
	private String nickname;
	private int type;
	
	//不作一這一方的映射
	private List<Address> addresses;
	
    //setter 和 getter  ..........
}

     2.並且已經存在一個數據庫simple_shop, 以及表s_user,以下是sql語句session

drop database if exists simple_shop;
create database simple_shop;
grant all on simple_shop.* to 'wxn'@'localhost';
## 密碼是wxn123
use simple_shop;

create table s_user(
	id int(11) primary key auto_increment,
	username varchar(100),
	password varchar(100),
    nickname varchar(100),
	type int(5)
);

create table s_address(
	id int(11) primary key auto_increment,
	name varchar(255),
	phone varchar(100),
	postcode varchar(100),
	reciver varchar(100),
	user_id int(11),
	constraint foreign key (user_id) references s_user(id)
);

     3. 在User.java的同目錄中建立一個User.xml做爲配置的映射文件mybatis

<?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="cn.feezu.wxn.domain.User"> <!-- 這裏指定namespace名同javabean -->
<!--<mapper namespace="cn.feezu.wxn.mapper.UserMapper"> --><!-- 使用Mapper接口 -->
    <!-- 這裏的入參爲User,使用的是config文件中指定的別名 -->
	<insert id="add" parameterType="User">
		insert into s_user(username,
		password, nickname, type)
		value(#{username}, #{password}, #{nickname},
		#{type});
	</insert>

	<update id="update" parameterType="User">
		update s_user set
		password=#{password}, nickname=#{nickname},
		username=#{username},
		type=#{type}
	</update>

	<delete id="delete" parameterType="Integer">
		delete from s_user where
		id=#{id};
	</delete>
    <!-- 這裏的出參爲User,使用的是config文件中指定的別名 -->
	<select id="select" parameterType="int" resultType="User">
		select * from
		s_user where id=#{id};
	</select>
</mapper>
  • myBatis基本的使用

        1. MyBatis使用SqlSession來控制事務,而SqlSession須要使用工廠模式建立,而SqlSession工廠的建立須要mybatis的配置文件做爲資源來構建,抽取這個過程,獲得一個MyBatisUtils的工具類.app

package cn.feezu.wxn.utils;

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;

public class MyBatisUtil {
	private static SqlSessionFactory factory;
	static{
		try {
			InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
			factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static SqlSession openSession(){
		return factory.openSession();
	}
	
	public static void closeSession(SqlSession session){
		if (session != null) {
			session.close();			
		}
	}
}

    2. 那麼建立測試方法來檢驗mybatis的配置是否生效dom

@Test
	public void testUserAdd() {
		SqlSession session = null;
		try {
			session = MyBatisUtil.openSession();
			// 調用mapper文件插入數據,調用以前須要將mapper文件配置到mybatis-config.xml文件中
			User user = new User();
			user.setNickname("大刀王五");
			user.setPassword("123123");
			user.setUsername("wangwu");
			user.setType(1);
			//注意insert方法第一個參數
			//session.insert("cn.feezu.wxn.domain.User.add", user);
			session.insert(User.class.getName() + ".add", user);
			session.commit();  //提交事務
		} catch (Exception e) {
			e.printStackTrace();
			session.rollback(); // 事務提交失敗,回滾
		} finally {
			MyBatisUtil.closeSession(session); //關閉session
		}
	}

     3. 使用Mapper接口

        1.對應User.xml中的增刪改查,能夠建立對應的Mapper接口,UserMapper.java,而不須要實現

package cn.feezu.wxn.mapper;

import cn.feezu.wxn.domain.User;

/**
 * 爲User.xml增長接口方法
 * @author wangxn
 *
 */
public interface UserMapper {

	public void add(User user);
	
	public void update(User user);
	
	public void delete(Integer id);
	
	public User select(int id);
}

      2. 建立了接口以後, 那麼在javabean的映射文件中就能夠替換mapper標籤爲中的namespace爲Mapper接口了,其餘配置不變

<mapper namespace="cn.feezu.wxn.mapper.UserMapper">

     3. 在代碼中使用時,就能夠不直接使用session了,而是用Mapper來處理,好處是不用使用字符串傳參防止出錯了

@Test
	public void testUserAdd(){
		SqlSession session = null;
		try {
			session = MyBatisUtil.openSession();
			
			User user = new User();
			user.setUsername("zhangfei");
			user.setNickname("zhangyide");
			user.setPassword("123123");
			user.setType(2);
			
			session.getMapper(UserMapper.class).add(user);
			
			session.commit();
		} catch (Exception e) {
			e.printStackTrace();
			session.rollback();
		} finally {
			MyBatisUtil.closeSession(session);
		}
	}
相關文章
相關標籤/搜索