MyBatis第三篇:配置文件及输入输出映射

5. sqlMapConfig.xml配置文件

sqlMapConfig.xml中的配置顺序如下:

顺序

配置标签名称

说明

1

properties

属性

2

settings

配置全局参数

3

typeAliases

类型别名

4

typeHandlers

类型处理器

5

objectFactory

对象工厂

6

plugins

插件

7

environments

环境集合属性对象

8

databaseIdProvider

多数据库支持

9

mappers

映射器

5.1 properties(属性)

作用:加载属性文件(db.properties)和定义属性

1. db.properties

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

2. sqlMapConfig.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>

	<!-- 加载属性文件:
		 1.resource属性:指定本地属性文件的位置
		 2.url属性:指定网络上的属性文件位置
		 3.使用内部property标签定义属性
		 4.加载顺序:首先加载内部property标签定义的属性,再加载属性文件中定义的属性;
		 如果有相同的属性,属性文件中的属性覆盖内部property标签定义的属性-->
	<properties resource="db.properties" >
		<property name="username" value="root"/>
		<property name="password" value="123456"/>
	</properties>
	
	<!-- 运行环境配置;default:默认使用的环境 -->
	<environments default="develop">
		<!-- id:环境标识 -->
		<environment id="develop">
			<!-- 事务配置,type="JDBC":使用JDBC事务 -->
			<transactionManager type="JDBC"></transactionManager>
			<!-- 数据源配置,POOLED:MyBatis框架的连接池 -->
			<dataSource type="POOLED">
				<!-- <property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/test" />
				<property name="username" value="root" />
				<property name="password" value="123456" /> -->
				
				<!-- 使用db.properties属性文件中的属性 -->
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>
	
	
	<!-- 加载映射文件 -->
	<mappers>
		<!--加载User.xml映射文件,说明:resource属性:指定文件的位置-->
		<mapper resource="sqlMap/User.xml"/>
		
		<!-- 加载UserMapper.xml映射文件 -->
		<mapper resource="sqlMap/UserMapper.xml"/>
	</mappers>
	
</configuration>

5.2 typeAliases(类型别名)

作用:定义类型别名,使用方便

5.2.3 内置别名:

别名

映射类型

_byte

byte

_long

long

_short

short

_int

int

_integer

int

_double

double

_float

float

_boolean

boolean

string

String

byte

Byte

long

Long

short

Short

int

Integer

integer

Integer

double

Double

float

Float

boolean

Boolean

date

Date

decimal

BigDecimal

bigdecimal

BigDecimal

object

Object

map

Map

hashmap

HashMap

list

List

arraylist

ArrayList

collection

Collection

iterator

Iterator

说明:

  1. 内置别名可以直接使用
  2. 别名不区分大小写

5.2.2 自定义别名

方式一:

<?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>

	<!-- 加载属性文件:
		 1.resource属性:指定本地属性文件的位置
		 2.url属性:指定网络上的属性文件位置
		 3.使用内部property标签定义属性
		 4.加载顺序:首先加载内部property标签定义的属性,再加载属性文件中定义的属性;
		 如果有相同的属性,属性文件中的属性覆盖内部property标签定义的属性-->
	<properties resource="db.properties" >
		<property name="username" value="root"/>
		<property name="password" value="123456"/>
	</properties>
	
	<!-- 配置自定义别名 -->
	<typeAliases>
		<!-- 配置用户的别名:
			 1.type属性:别名映射的类型
			 2.默认使用类的名称作为别名的名称
			 3.alias属性:指定别名的名称-->
		<typeAlias type="com.yong.po.User" alias="user"/>
	</typeAliases>
	
	
	<!-- 运行环境配置;default:默认使用的环境 -->
	<environments default="develop">
		<!-- id:环境标识 -->
		<environment id="develop">
			<!-- 事务配置,type="JDBC":使用JDBC事务 -->
			<transactionManager type="JDBC"></transactionManager>
			<!-- 数据源配置,POOLED:MyBatis框架的连接池 -->
			<dataSource type="POOLED">
				<!-- <property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/test" />
				<property name="username" value="root" />
				<property name="password" value="123456" /> -->
				
				<!-- 使用db.properties属性文件中的属性 -->
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>
	
	
	<!-- 加载映射文件 -->
	<mappers>
		<!--加载User.xml映射文件,说明:resource属性:指定文件的位置-->
		<mapper resource="sqlMap/User.xml"/>
		
		<!-- 加载UserMapper.xml映射文件 -->
		<mapper resource="sqlMap/UserMapper.xml"/>
	</mappers>
	
</configuration>

方式二:

	<!-- 配置自定义别名 -->
	<typeAliases>
		<!-- 配置用户的别名:
			 1.type属性:别名映射的类型
			 2.默认使用类的名称作为别名的名称
			 3.alias属性:指定别名的名称-->
		<!-- <typeAlias type="com.yong.po.User" alias="user"/> -->
		
		<!-- 包扫描方式配置别名,说明:
		 1.name属性:要扫描的包
		 2.默认使用类的名称,作为别名
		 3.如果有多个包配置多个package -->
		<package name="com.yong.po"/>
	</typeAliases>

5.3 Mappers(映射器)

作用:加载mapper映射文件

方式一:

	<!-- 加载映射文件 -->
	<mappers>
		<!--加载User.xml映射文件,说明:resource属性:指定文件的位置-->
		<mapper resource="sqlMap/User.xml"/>
		
		<!-- 加载UserMapper.xml映射文件 -->
		<mapper resource="sqlMap/UserMapper.xml"/>
	</mappers>

方式二:

	<!-- 加载映射文件 -->
	<mappers>
		<!--加载User.xml映射文件,说明:resource属性:指定文件的位置-->
		<!-- <mapper resource="sqlMap/User.xml"/> -->
		
		<!-- 加载UserMapper.xml映射文件 -->
		<!-- <mapper resource="sqlMap/UserMapper.xml"/> -->
		
		<!-- 包扫描方式配置映射文件:
			1.name属性:要扫描的包名称
			2.前提必须是mapper代理开发方法
			3.要求mapper映射文件,与mapper接口在同一个目录
			4.要求mapper映射文件的名称,与mapper接口名称一致-->
		<package name="com.yong.mapper"/>
	</mappers>

6. 输入输出映射

6.1 输入映射

6.1.1 ParameterType

Java简单类型:

详情见入门程序

	<!--  select标签:用于放置查询sql语句
			 #{}占位符,相当于jdbc中的问号?当参数传递的是java简单类型的时候,花括号中的内容可以是任意字符串  -->
	<select id="queryUserById" parameterType="int" resultType="com.yong.po.User">
		select * from user where id=#{id}
	</select>

Pojo类型

详情见入门程序

	<!-- insert标签:用于放置新增sql语句
			id属性:唯一区分一条sql语句
			parameterType属性:输入参数类型
			resultType属性:返回值类型
	 		#{}:占位符,当参数传递的是pojo的时候,花括号中的内容是pojo的属性
	 		
	 		查询主键:
		 		useGeneratedKeys="true": 使用自动生成主键
		 		keyColumn="id":表中列名
		 		keyProperty="id":pojo中属性名  -->
	<insert id="insert" parameterType="com.yong.po.User" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
	
		<!-- selectKey标签:查询主键,说明:
			 	 keyColumn属性:主键字段(表)
			 	 keyProperty属性:主键属性(pojo)
			 	 resultType属性:指定主键字段类型
			 	 order属性:指定在insert语句执行前还是执行后,获取主键。
				 	 AFTER:在insert语句之后
				 	 BEFORE:在insert语句之前 -->
	 	<!-- <selectKey keyColumn="id" keyProperty="id" resultType="int" order="AFTER">
	 		select LAST_INSERT_ID()
	 	</selectKey> -->
	 	
		insert into user (username, sex, birthday, mobilephone, email, password) values (#{username}, #{sex}, #{birthday}, #{mobilephone}, #{email}, #{password})
	</insert>

6.2 输出映射

6.2.1 resultType

Java简单类型:

1. UserMapper.xml

	<select id="queryCount" resultType="int">
		select count(*) from user
	</select>

2. UserMapper.java

	int queryCount();

3. 测试

	@Test
	public void queryCount() {
		
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		
		int count = userMapper.queryCount();
		
		System.out.println("count = " + count);
		
		sqlSession.close();
	}

Pojo类型

详情见入门程序

	<!--  select标签:用于放置查询sql语句
			 #{}占位符,相当于jdbc中的问号?当参数传递的是java简单类型的时候,花括号中的内容可以是任意字符串  -->
	<select id="queryUserById" parameterType="int" resultType="com.yong.po.User">
		select * from user where id=#{id}
	</select>

6.2.2 resultMap

当表的列名和pojo属性名不一样时,使用resultType时,会出现部分属性值无法成功转换。此时,我们需要使用resultMap手动设置表的列名和pojo的属性名的对应关系。

问题引入:

1. 新建UserTemp.java,将id属性名改为userId

package com.yong.po;

import java.util.Date;

public class UserTemp {

	private Integer userId; // int(11) NOT NULL AUTO_INCREMENT,
	private String username; // varchar(255) DEFAULT NULL,
	private String sex; // varchar(255) DEFAULT NULL,
	private Date birthday; // date DEFAULT NULL,
	private String mobilephone; // varchar(255) DEFAULT NULL,
	private String email; // varchar(255) DEFAULT NULL,
	private String password; // varchar(255) DEFAULT NULL,

	public UserTemp() {
		super();
		// TODO Auto-generated constructor stub
	}

	public UserTemp(Integer userId, String username, String sex, Date birthday, String mobilephone, String email,
			String password) {
		super();
		this.userId = userId;
		this.username = username;
		this.sex = sex;
		this.birthday = birthday;
		this.mobilephone = mobilephone;
		this.email = email;
		this.password = password;
	}

	public Integer getUserId() {
		return userId;
	}

	public void setUserId(Integer userId) {
		this.userId = userId;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public String getMobilephone() {
		return mobilephone;
	}

	public void setMobilephone(String mobilephone) {
		this.mobilephone = mobilephone;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public String toString() {
		return "UserTemp [userId=" + userId + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday
				+ ", mobilephone=" + mobilephone + ", email=" + email + ", password=" + password + "]";
	}

}

2. UserMapper.java

	List<UserTemp> queryUserByUsername(String username);

3. UserMapper.xml

	<select id="queryUserByUsername" parameterType="string" resultType="com.yong.po.UserTemp">
		select * from user where username like '%${value}%'
	</select>

4. 测试

	@Test
	public void queryUserByUsername() {
		
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		
		List<UserTemp> userTemps = userMapper.queryUserByUsername("Y");
		
		System.out.println(userTemps);
		
		sqlSession.close();
	}

结果:

解决问题:

1. 修改UserMap.xml

	<!-- resultMap标签:配置java对象的属性,与sql语句的字段对应
			 type属性:映射的类型
			 id属性:唯一标识,通过id引用该resultMap-->
	<resultMap type="com.yong.po.UserTemp" id="userTempMap">
	
		<!--id标签:配置主键的对应关系
				column属性:主键字段(表)
				property属性:主键属性(pojo)  -->
		<id column="id" property="userId"/>
		
		<!--result标签:配置普通字段对应关系  -->
		<result column="username" property="username"/>
		<result column="sex" property="sex"/>
		<result column="birthday" property="birthday"/>
		<result column="mobilephone" property="mobilephone"/>
		<result column="email" property="email"/>
		<result column="password" property="password"/>
	</resultMap>
	
	<!-- <select id="queryUserByUsername" parameterType="string" resultType="com.yong.po.UserTemp">
		select * from user where username like '%${value}%'
	</select> -->

	<select id="queryUserByUsername" parameterType="string" resultMap="userTempMap">
		select * from user where username like '%${value}%'
	</select>

结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值