基於Maven構建Mybatis項目


使用的數據庫配置參考筆記-example數據庫內容

項目根目錄添加porm文件

<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.hao.example</groupId>
  <artifactId>MavenMybatis</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <dependencies>
    <!-- 數據庫驅動 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.32</version>
    </dependency>
    <!-- 引入mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.3.0</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <!-- 定義Java版本 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>

    <resources>
      <resource>
        <!-- 由於想將Mapper.xml文件和Mapper接口放在一起,
                                    故將src/main/java添加到資源搜索目錄  -->
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
      <!-- 原有的src/main/resources也要添加到資源搜索目錄 -->
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>

</project>

在src/main/resources下創建數據庫對應的實體類:Admin,其符合JavaBean的標准

package com.hao.example.po;

public class Admin {
	private Integer id;
	private String username;
	private String password;
	
	public Admin() {

	}
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public String toString() {
		return "Admin [id=" + id + ", username=" + username + ", password="
				+ password + "]";
	}
}

在src/main/java下創建AdminMapper接口,用於操作Admin類

AdminMapper和Hibernate中的AdminDao是一個東西,只不過在Mybatis更習慣稱為Mapper

package com.hao.example.mapper;

import com.hao.example.po.Admin;

public interface AdminMapper {
	public Admin getAdmin(Integer id);
	public int deleteAdmin(Integer id);
	public int insertAdmin(Admin admin);
}

在src/main/resources下添加數據庫配置文件:db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/example?characterEncoding=utf-8
jdbc.username=root
jdbc.password=h66666

在src/main/resources下添加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>
  
  <!-- 引入數據源配置文件  -->
  <properties resource="db.properties" />
  <!-- 為了避免一直編寫包全名,定義別名以方便引用Admin類,Admin類可查看代碼  -->
  <typeAliases>
    <typeAlias type="com.hao.example.po.Admin" alias="admin"/>
  </typeAliases>

  <!-- 定義數據庫環境,且默認使用development環境 -->
  <environments default="development">
    <!-- 定義id為development的數據庫環境 -->
    <environment id="development">
      <!-- 采用jdbc事務管理 -->
      <transactionManager type="JDBC"/>
      <!-- 配置數據庫連接信息 -->
      <dataSource type="POOLED">
        <property name="driver" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
      </dataSource>
    </environment>
  </environments>
  <!-- 定義映射器 -->
  <mappers>
    <!-- 引入AdminMapper映射器配置文件 -->
	<mapper resource="com/hao/example/mapper/AdminMapper.xml"/>
  </mappers>

</configuration>

在AdminMapper接口的同一目錄下創建AdminMapper.xml文件

AdminMapper.xml相當於AdminMapper接口的實現類,Mybatis框架會利用動態代理技術,將AdminMapper.xml文件轉化為AdminMapper接口的實現類,因此要注意,AdminMapper接口中的函數,在AdminMapper.xml文件中都要有對應的標簽,以執行相應的SQL語句

<?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.hao.example.mapper.AdminMapper">
  <select id="getAdmin" resultType="admin" parameterType="int">
    select * from admin where id = #{id}
  </select>
  <insert id="insertAdmin" parameterType="admin">
    insert into admin(username, password) values(#{username}, #{password})
  </insert>
  <delete id="deleteAdmin" parameterType="int">
    delete from admin where id = #{id}
  </delete>
</mapper>

創建工具類:SqlSessionFactoryUtil類,用於啟動Mybatis,獲得Mybatis的相關入口

package com.hao.example.utils;

import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;

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

/**
 * 創建SqlSessionFactory的工具類,實現為單例模式
 *
 */
public class SqlSessionFactoryUtil {
	
	// SqlSessionFactory對象
	private static SqlSessionFactory sqlSessionFactory = null;
	// 類線程鎖
	private static final Class<SqlSessionFactoryUtil> CLASS_LOCK = SqlSessionFactoryUtil.class;
	
	/**
	 * 私有化默認構造函數
	 */
	private SqlSessionFactoryUtil() {

	}
	
	/**
	 * 構建SqlSessionFactory
	 * @return
	 */
	public static SqlSessionFactory initSqlSessionFactory(){
		String resource = "mybatis-config.xml";
		InputStream inputStream = null;
		try {
			inputStream = Resources.getResourceAsStream(resource);
		} catch (Exception e) {
			Logger.getLogger(SqlSessionFactoryUtil.class.getName()).log(Level.SEVERE, null, e);
		}
		
		// 為了避免並發狀態下的SqlSessionFactory不唯一,需要添加鎖
		synchronized(CLASS_LOCK){
			if(sqlSessionFactory == null){
				sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			}
		}
		return sqlSessionFactory;
	}
	
	/**
	 * 獲得一個新的Session
	 * @return
	 */
	public static SqlSession openSession(){
		if(sqlSessionFactory == null){
			initSqlSessionFactory();
		}
		return sqlSessionFactory.openSession();
	}
	
}

執行main函數,測試代碼,若能成功運行則構建正確

package com.hao.example.main;

import org.apache.ibatis.session.SqlSession;

import com.hao.example.mapper.AdminMapper;
import com.hao.example.po.Admin;
import com.hao.example.utils.SqlSessionFactoryUtil;


public class Main {
	
	public static void main(String[] args) throws Exception {
		
		SqlSession sqlSession = null;
		
		try {
			sqlSession = SqlSessionFactoryUtil.openSession();
			AdminMapper adminMapper = sqlSession.getMapper(AdminMapper.class);
			
			Admin admin = adminMapper.getAdmin(2);
			System.out.println(admin);
			
			sqlSession.commit();
			
		} catch (Exception e) {
			System.out.println(e);
			sqlSession.rollback();
		}finally{
			if(sqlSession != null){
				sqlSession.close();
			}
		}
	}
	
}


免責聲明!

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



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