mybatis详解(二)

一、动态SQL之if标签:

	<!-- 动态SQL语句 -->
	<select id="findUserByNameAndIdNumber" parameterType="com.milan.entity.User" resultType="com.milan.entity.User">
	select * from t_user
		<where>
			<if test="username != null and username != ''">
				and username like '%${username}%'
			</if>
			<if test="idNumber != null and idNumber != ''">
				and idNumber = #{idNumber}
			</if>
		</where>
	</select>


可以将where条件封装到sql标签中,以备其他select标签重用

	<!-- 动态SQL语句 -->
	<select id="findUserByNameAndIdNumber" parameterType="com.milan.entity.User" resultType="com.milan.entity.User">
	select * from t_user
		<include refid="user_where"></include>
	</select>
	
	<!-- 封装SQL条件,以备重用 -->
	<sql id="user_where">
		<where>
			<if test="username != null and username != ''">
				and username like '%${username}%'
			</if>
			<if test="idNumber != null and idNumber != ''">
				and idNumber = #{idNumber}
			</if>
		</where>
	</sql>

二、动态SQL之foreach标签:

	<!-- foreach标签:主要应用于sql中的in条件
		collection:对应parameterType中的参数
		item:字段名
		open:条件前缀
		close:条件后缀
		separator:每个参数的分隔符
	 -->
	<select id="findUserByIds" parameterType="com.milan.entity.Parameters" resultType="com.milan.entity.User">
		select * from t_user
		<where>
			<foreach collection="parameters" item="id" open="id in(" close=")" separator=",">
				#{id}
			</foreach>
		</where>
	</select>
对应的Parameters类:

/**
 * 参数类
 * @author Clark
 */
public class Parameters {
	
	private String parameter;
	private List<Integer> parameters;
	public String getParameter() {
		return parameter;
	}
	public void setParameter(String parameter) {
		this.parameter = parameter;
	}
	public List<Integer> getParameters() {
		return parameters;
	}
	public void setParameters(List<Integer> parameters) {
		this.parameters = parameters;
	}	
}
测试类:

	@Test
	public void getUserByIds() throws Exception{
		String resource ="SqlMapConfig.xml";  
        InputStream inputStream = Resources.getResourceAsStream(resource);  
        //创建SqlSessionFactory  
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);  
        //创建SqlSession  
        SqlSession sqlSession = factory.openSession();  
        //调用SqlSession的增删改查方法  
		UserMapper mapper = sqlSession.getMapper(UserMapper.class);
		Parameters parameters = new Parameters();
		List<Integer> i = new ArrayList<>();
		i.add(1);
		i.add(3);
		parameters.setParameters(i);
		List<User> userlist = mapper.findUserByIds(parameters);
		System.out.println(userlist);
		sqlSession.close();
	}


三、单个对象映射关系:

	<resultMap type="com.milan.entity.UserOrder" id="orderAndUserResultMap">
		<id column="id" property="id" />
		<result column="userId" property="userId" />
		<result column="goodId" property="goodId" />
		<result column="goodNumber" property="goodNumber" />
		<result column="discount" property="discount" />
		<result column="createTime" property="createTime" />
		<result column="describe" property="describe" />
		<!-- association:表示单个对象的对应关系
			property:表示UserOrder中的User属性
			javaType:表示User的属性类型
		 -->
		<association property="user" javaType="com.milan.entity.User">
			<id column="uid" property="id" />
			<result column="username" property="username" />
			<result column="password" property="password" />
			<result column="idNumber" property="idNumber" />
			<result column="vip" property="vip" />
			<result column="score" property="score" />
			<result column="ucreateTime" property="createTime" />
			<result column="lastLoginTime" property="lastLoginTime" />
		</association>
	</resultMap>
	
	<!-- 手动映射 -->
	<select id="findOrderAndUser" resultMap="orderAndUserResultMap">
		SELECT o.*, u.id AS uid,username,password,idNumber,vip,score,u.createTime AS ucreateTime,lastLoginTime
			FROM t_userOrder o,t_user u WHERE o.userId = u.id;
	</select>

四:集合对象映射:

		<resultMap type="com.milan.entity.User" id="UserAndOrderResultMap">
		<id column="id" property="id" />
		<result column="username" property="username" />
		<result column="password" property="password" />
		<result column="idNumber" property="idNumber" />
		<result column="vip" property="vip" />
		<result column="score" property="score" />
		<result column="ucreateTime" property="createTime" />
		<result column="lastLoginTime" property="lastLoginTime" />
		<!-- 指定集合对象关系映射 -->
		<collection property="userOrder" ofType="com.milan.entity.UserOrder">
			<id column="oid" property="id" />
			<result column="userId" property="userId" />
			<result column="goodId" property="goodId" />
			<result column="goodNumber" property="goodNumber" />
			<result column="discount" property="discount" />
			<result column="ocreateTime" property="createTime" />
			<result column="describe" property="describe" />
		</collection>
	</resultMap>
	<select id="findUserAndOrder" resultMap="UserAndOrderResultMap">
		SELECT u.*,o.id as oid,userId,goodId,goodNumber,discount,o.createTime as ocreateTime,`describe` 
		from t_user as u,t_userOrder as o where u.id = o.userId
	</select>












### MyBatis 详解:使用教程与原理介绍 #### 工作原理概述 MyBatis 是一种持久层框架,它支持定制化 SQL 查询、存储过程以及高级映射。其工作流程可以分为以下几个方面: - 配置文件解析阶段:MyBatis 加载 `mybatis-config.xml` 文件并初始化全局配置信息[^3]。 - 动态 SQL 解析阶段:SQL 映射语句被加载到内存中,并根据参数动态生成最终执行的 SQL 语句。 - 数据库交互阶段:通过 JDBC 进行数据库操作,返回查询结果。 #### 开发环境搭建 要开始使用 MyBatis,需完成以下准备工作: - 导入 MyBatis 的核心 JAR 包作为项目的依赖项。如果采用 Maven 构建工具,则可以通过 POM 文件引入所需依赖[^2]。 ```xml <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.x.x</version> </dependency> ``` #### 全局配置文件说明 (`mybatis-config.xml`) 此文件定义了 MyBatis 的运行环境及相关设置,主要包括数据源配置和事务管理器等内容。以下是典型的 XML 结构示例: ```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> <!-- 环境配置 --> <environments default="development"> <environment id="development"> <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> <!-- Mapper 扫描路径 --> <mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> </mappers> </configuration> ``` #### SQL 映射文件设计 SQL 映射文件描述了如何将 Java 对象映射至数据库表中的记录。下面是一个简单的例子展示增删改查的操作方式: ```xml <mapper namespace="com.example.mapper.UserMapper"> <!-- 插入新用户 --> <insert id="addUser" parameterType="com.example.model.User"> INSERT INTO users (name, age) VALUES (#{name}, #{age}) </insert> <!-- 删除指定ID的用户 --> <delete id="removeUserById" parameterType="int"> DELETE FROM users WHERE id=#{id} </delete> <!-- 更新现有用户的属性 --> <update id="modifyUserInfo" parameterType="com.example.model.User"> UPDATE users SET name=#{name}, age=#{age} WHERE id=#{id} </update> <!-- 查找特定条件下的所有匹配条目 --> <select id="findUsersByAgeRange" resultType="com.example.model.User"> SELECT * FROM users WHERE age BETWEEN #{minAge} AND #{maxAge} </select> </mapper> ``` #### 编程接口调用方法 在实际编码过程中,通常会借助 MyBatis 提供的 SqlSession 来实现业务逻辑处理。例如: ```java import org.apache.ibatis.session.SqlSession; import com.example.mapper.UserMapper; public class UserService { private final UserMapper userMapper; public UserService(SqlSession sqlSession){ this.userMapper = sqlSession.getMapper(UserMapper.class); } public void addUser(String name,int age){ userMapper.addUser(name,age); // 调用对应的 insert 方法 } public List<User> findUsersInRange(int minAge,int maxAge){ return userMapper.findUsersByAgeRange(minAge,maxAge); // 返回符合条件的结果集 } } ``` #### 官方资源获取途径 对于希望深入研究该技术栈的学习者而言,可以从官方 GitHub 库下载最新版本及其文档资料[^4]: - 地址链接: https://github.com/mybatis/mybatis-3 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值