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();
	}

在这里插入图片描述 在这里插入图片描述

相关文章
相关标签/搜索