MyBatis的xml配置文件笔记

入门程序:

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>
	<!-- 
		sqlMapConfig:配置文件必须满足以下顺序:
		(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,
		objectWrapperFactory?,reflectorFactory?,plugins?,environments?,
		databaseIdProvider?,mappers?)
	 -->

	<!-- 1,properties:引入外部资源文件 -->
	<properties resource="jdbc.properties"></properties>
	
	<!-- settings:配置mybatis缓存,二级缓存,查询缓存(一般不用) -->
	
	<!-- 2,别名的定义: -->
	<typeAliases>
		<!-- typeAlias:定义单个别名 type:指定需要定义别名类型 alias:别名名称 -->
		<!-- <typeAlias type="com.itheima.pojo.User" alias="user"/> -->
		<!-- 
			批量定义别名:扫描需要定义别名所在包路径,此包下面所有的类都自动被定义别名
			别名名称:别名名称就是类名称,字母大小写都可
		 -->
		<package name="com.demo.pojo"/>
	</typeAliases>
	
	<!-- typeHandlers:把数据库类型VARCHAR,LONG等等这些类型自动转换为Java类型 99%不需要写,mybatis都帮我们做了-->
	<!-- objectWrapperFactory:对象工厂,创建返回值对象 -->
	<!-- plugins:mybatis框架开发可以引入第三方插件:分页插件 -->

	<!-- environments:mybatis开发环境(数据库,事物),可以配置多个开发环境 -->
	<environments default="development">
		<!-- environment:配置单个开发环境 id:开发环境唯一标识 -->
		<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:引入映射文件,可以引入多个映射文件 -->
	<mappers>
		<!-- 引入映射文件 -->
		<mapper resource="sqlMap/UserMapper.xml" />
	</mappers>
</configuration>

jdbc.properties(连接池配置)

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

Mapper映射文件(UserMapper.xml)

<?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:映射文件开始标签,所有sql语句都封装到mapper标签中
	namespace:命名空间,唯一标识一个映射文件,名称可以自定义
	特殊情况:如果是接口代理开发情况,namespace有特殊含义,不能自定义
	
	如果是接口代理开发,namespace必须是接口全类路径名
 -->
<mapper namespace="com.demo.dao.UserDao">

	<!-- 查询所有用户数据 -->
	<select id="findAll" resultType="user">
		select * from user
	</select>
	
	<!-- 
		根据id查询用户数据
		select:用来封装查询sql语句
		parameterType:指定传递参数类型
		resultType:指定查询结构映射的返回值类型
		#{}:相当于占位符?,#{}获取传递参数值,
		如果传递的参数是基本类型,括号里面可以是任意值;
		如果传递的pojo参数,括号里面必须ognl表达式
		ognl:对象导航语言 语法:属性.属性.属性。。。
	 -->
	<select id="findUserWithId" parameterType="int" resultType="user">
		select * from user where id=#{id}
	</select>
</mapper>

测试类↓

package com.demo.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

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

import com.demo.dao.UserDao;
import com.demo.pojo.User;

public class MybatisTest {
	
	SqlSessionFactory sqlSessionFactory = null;
	
	@Before
	public void beforeConfig() throws IOException{
		//1,加载核心配置文件
		InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
		//2,获取sqlSessionFactory
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	}

	/**
	 * 需求:使用mybatis接口代理开发模式
	 * 注意:mybatis使用接口代理开发模式,必须满足以下规范:
	 * 1,映射文件namespace必须是接口全路径名
	 * 2,映射文件sql语句id必须和接口中方法名相同
	 * 3,映射文件返回值类型必须和接口返回值类型一致
	 * 4,映射文件接收参数类型必须和接口传递参数类型一致
	 */
	@Test
	public void test01() throws Exception{
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//获取dao的接口代理对象
		UserDao userDao = sqlSession.getMapper(UserDao.class);
		List<User> list = userDao.findAll();
		User user = userDao.findUserWithId(32);
		System.out.println(user);
		System.out.println(list);
	}
	
}


sqlMapConfig.xml中的mappers标签:

mappers:引入映射文件,此标签可以引入多个映射文件
mappers引入映射文件方式有三种,每一种都对应着不同开发模式↓

第一种引入方式:

<mappers>
	<!-- 引入映射文件 -->
	<mapper resource="sqlMap/UserMapper.xml" />
</mappers>

开发方式:
传统开发模式:DAO、DAO实现类
接口代理开发模式:只有接口即可开发
接口代理开发必须满足规范:
1,映射文件namespace必须是接口全路径名
2,映射文件sql语句id必须和接口中方法名相同
3,映射文件返回值类型必须和接口返回值类型一致
4,映射文件接收参数类型必须和接口传递参数类型一致

第二种引入方式:class(此模式只适用于接口代理开发模式)

<mappers>
	<mapper class="com.demo.dao.UserMapper"/> -->
</mappers>

开发规范:
1,映射文件namespace必须是接口全类路径名
2,映射文件sql语句id必须和接口方法名一致
3,映射文件必须和接口在同一个编译目录,且名称相同
4,映射文件返回值类型和接口的返回值类型一致
5,映射文件接收参数类型和接口传递参数类型一致

第三种引入方式:package批量扫描映射文件

<mappers>
	<package name="com.demo.dao"/>
</mappers>

开发规范:
1,映射文件namespace必须是接口全类路径名
2,映射文件sql语句id必须和接口方法名一致
3,映射文件必须和接口在同一个编译目录,且名称相同
4,映射文件返回值类型和接口的返回值类型一致
5,映射文件接收参数类型和接口传递参数类型一致

最后,贴一段UserMapper.xml的标签属性解释

<?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:映射文件开始标签,所有sql语句都封装到mapper标签中
	namespace:命名空间,唯一标识一个映射文件,名称可以自定义
	特殊情况:如果是接口代理开发情况,namespace有特殊含义,不能自定义
	
	如果是接口代理开发,namespace必须是接口全类路径名
 -->
<mapper namespace="com.demo.dao.UserMapper">

	<!-- 查询所有用户数据 -->
	<select id="findAll" resultType="user">
		select * from user
	</select>
	
	<!-- 
		根据id查询用户数据
		select:用来封装查询sql语句
		parameterType:指定传递参数类型
		resultType:指定查询结构映射的返回值类型
		#{}:相当于占位符?,#{}获取传递参数值,
		如果传递的参数是基本类型,括号里面可以是任意值;
		如果传递的pojo参数,括号里面必须ognl表达式
		ognl:对象导航语言 语法:属性.属性.属性。。。
	 -->
	<select id="findUserWithId" parameterType="int" resultType="user">
		select * from user where id=#{id}
	</select>
	
	<!--
		需求:根据用户名进行模糊查询 
		#{}占位符获取值:
			如果获取的值是字符类型数据,#{}自动加上双引号
		特殊用法:为模糊查询特定查询方法
		使用方法:"%"#{username}"%"
		${}sql语句拼接:把传递参数无论是字符,还是基本类型,${}都是原样拼接,${}有sql注入风险
		${}特点:
			1,如果传递的值是基本类型,${}括号里面必须是value
			2,如果传递参数是pojo类型,${}括号里面必须使用ognl表达式获取参数值
	 -->
	<select id="findUserWithLikeUsername" parameterType="string" resultType="com.demo.pojo.User">
		select * from user where username like "%"#{username}"%"
	</select>
	
	<!--
		需求:保存用户数据
		insert:所有的插入sql语句都写在insert标签,也就是说insert标签用来封装保存数据sql语句
		id:sql语句唯一标识
		parameterType:指定传递阐述类型
		#{}:如果传递参数是ognl,获取参数使用ognl表达式
	 -->
	 <insert id="saveUser" parameterType="com.demo.pojo.User">
	 	<!-- 
	 		selectKey:查询用户主键,保存时候查询
	 		keyProperty:查询结果映射的属性名称
	 		order:主键生成策略,主键是在sql语句执行之后生成
	 		resultType:指定返回值类型
	 	 -->
	 	<selectKey keyProperty="id" order="AFTER" resultType="int">
	 		SELECT LAST_INSERT_ID()
	 	</selectKey>
	 	insert into user values(#{id},#{username},#{birthday},#{sex},#{address})
	 </insert>
	 
	 <!-- 
	 	需求:删除用户数据
	 	delete:用来封装删除语句的标签
	 	id:sql语句唯一标识
	 	parameterType:指定传递参数类型
	  -->
	 <delete id="deleteUserWithId" parameterType="int">
	 	delete from user where id=#{id}
	 </delete>
	 
	 <!-- 
	 	需求:根据id更新用户数据
	 	update:用来封装更新sql语句的标签
	 	id:sql语句唯一标识
	 	parameterType:传递参数类型
	  -->
	 <update id="updateUserById" parameterType="com.demo.pojo.User">
	 	update user set 
	 	username=#{username},
	 	birthday=#{birthday},
	 	sex=#{sex},
	 	address=#{address}
	 	where id=#{id}
	 </update>
</mapper>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值