Mybatis教程2【配置文件】

MyBatis 的配置文件包含了會深深影響 MyBatis 行爲的設置(settings)和屬性(properties)信息。文檔的頂層結構以下

configuration 配置
    properties 屬性
    settings 設置
    typeAliases 類型別名
    typeHandlers 類型處理器
    objectFactory 對象工廠
    plugins 插件
    environments 環境
        environment 環境變量
            transactionManager 事務管理器
            dataSource 數據源
    databaseIdProvider 數據庫廠商標識
    mappers 映射器

properties

配置一些常見變量,相似於spring中placeholder的做用。通常能夠用來引入數據庫配置、 在這裏插入圖片描述java

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssm
username=root
password=123456

在這裏插入圖片描述

typeHandlers

ypeHandlers稱作類型處理器。就是實現Java類型和數據庫類型之間轉換的。 除了系統提供的類型轉換器以外,開發者也能夠自定義類型轉換,以下:mysql

例如List<—>VARCHAR之間的類型轉換:spring

自定義轉換器

package com.sxt.myList;

import java.sql.CallableStatement;
import java.sql.JDBCType;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
/**
 * 自定義轉換器,集合,字符串
 * @author Administrator
 *
 */
@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(List.class)
public class MyList extends BaseTypeHandler<List<String>>{
	/**
	 * 將集合數據轉換成字符牀
	 */
	@Override
	public void setNonNullParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType)
			throws SQLException {
		StringBuilder sb = new StringBuilder();
		for (String s : parameter) {
			sb.append(s).append(";");
		}
		String msg = sb.toString();
		ps.setString(i, msg);
		
	}
	/**
	 * 從集合裏取出字符串轉換成集合
	 */
	@Override
	public List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException {
		String st = rs.getString(columnName);
		return Arrays.asList(st.split(";"));
	}

	@Override
	public List<String> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
		String st = rs.getString(columnIndex);
		return Arrays.asList(st.split(";"));
	}

	@Override
	public List<String> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

}

bean層

package com.sxt.bean;

import java.util.List;

public class Student {
	private Integer id;
	
	private String name;
	
	private List<String> games;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public List<String> getGames() {
		return games;
	}

	public void setGames(List<String> games) {
		this.games = games;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", games=" + games + "]";
	}
}

映射文件

<?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.sxt.dao.StudentDao">
	<select id="query" resultType="student">
				select * from t_student
	</select>
	<insert id="add" parameterType="student">
	insert into t_student(name,games)values(#{name},#{games})
	</insert>
	
	
</mapper>

接口【和映射文件在同級目錄下名字相同】

package com.sxt.dao;

import java.util.List;

import com.sxt.bean.Student;

public interface StudentDao {
	public List<Student> query();
	
	public int add(Student stu);
}

配置mybatis配置文件【裏面的配置文件下面詳解】

<?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" />
	<typeAliases>
		<package name="com.sxt.bean" />
	</typeAliases>
	<typeHandlers>
		<typeHandler handler="com.sxt.myList.MyList" />
	</typeHandlers>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<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>
		<package name="com.sxt.dao" />
	</mappers>
</configuration>

在這裏插入圖片描述

mapper註冊映射文件

映射器:咱們添加的SQL語句的映射文件要被配置文件可以發現,在自動發現方面mybatis在這方面並無實現,因此咱們須要經過mapper標籤來關聯映射文件。sql

方式一:一個個掃描數據庫

<!-- 註冊映射文件 -->
  <mappers>
  	<mapper resource="com/sxt/dao/UserMapper.xml"/>
  </mappers>

這種配置方式,對mapper的文件名沒有要求apache

方式二:掃描包 更簡單更經常使用的方式,則是經過包掃描去加載mapper文件,這個時候對mapper文件名有要求,要求mapper文件名和mapper接口必須一致。session

<!-- 註冊映射文件 -->
  <mappers>
  	<!-- <mapper resource="com/sxt/dao/UserMapper.xml"/> -->
  	<package name="com.sxt.dao"/>
  </mappers>

自定義別名映射

<typeAliases>
  	<typeAlias type="com.sxt.bean.User" alias="user"/>
  </typeAliases>

在這裏插入圖片描述 能夠批量掃描,自動生成別名,自動生成的別名是類型或者類名首字母小寫mybatis

<typeAliases>
  	<!-- <typeAlias type="com.sxt.bean.User" alias="user"/> -->
  	<package name="com.sxt.bean"/>
  </typeAliases>

注意自定義的別名使用的時候不區分大小寫app

測試

@Test
	public void query() {
		SqlSession session = Dbutils.getSession();
		StudentDao mapper = session.getMapper(StudentDao.class);
		//查詢
		List<Student> query = mapper.query();
		System.out.println(query);
		//添加
		Student user = new Student();
		user.setName("zhangsan");
		user.setGames(Arrays.asList("x","m","n"));
		mapper.add(user);
		session.commit();
		session.close();
	}

在這裏插入圖片描述 在這裏插入圖片描述

相關文章
相關標籤/搜索