61-SQL映射文件

SQL映射文件
一、掌握通过SQL映射文件进行增删该查

1.查询操纵
-id:对应的接口的方法名
-parameterType:对应接口的参数类型
-resultType:对应接口的返回值类型
-resultMap:对应接口的自定义映射返回值类型
2.insert update delete 三个标签都没有返回值类型,他们默认返回值类型都是int(表示影响行数)

①增加操作

insert into smbms_user (userCode,userName,userPassword) values(#{userCode},#{userName},#{userPassword})

@Test
void testInsertUser() {
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

	User user = new  User();
	user.setUserCode("charles");
	user.setUserName("Charles");
	user.setUserPassword("12345667");
	int row = userMapper.insertUser(user);
	
	System.out.println(row);
	sqlSession.commit(); // 增删改必须进行提交事务
} catch (Exception e) {
	sqlSession.rollback(); // 出现异常 回滚事务
	e.printStackTrace();
}finally {
	MyBatisUtils.closeSqlSession(sqlSession);
}

}

②修改操作

update smbms_user set userPassword = #{newPwd} where id = #{id}

③删除操作

二、掌握参数的使用
public interface UserMapper {

// [推荐]如果参数不超过3个,使用@Param来传递!超过3个之后,可以使用对象/Map集合
// 如果是固定业务,那么还是推荐@Param来推荐

/**
 * 根据用户名和用户角色模糊查询用户列表【使用Map集合来传递两个参数】
 * @param map
 * @return
 */
List<User> getUserListByMap(Map<String, Object> map);

/**
 * 根据用户名和用户角色模糊查询用户列表【使用对象来传递两个参数】
 * @param user
 * @return
 */
List<User> getUserListByUser(User user);

/**
 * 根据用户名和用户角色模糊查询用户列表【使用注解解决多个参数传值】
 * Param注解表示告诉MyBatis 参数是哪些
 * @param username
 * @param userRole
 * @return
 */
List<User> getUserListByUsernameAndUserRole(@Param("name")String username,@Param("roleId")int userRole);

/**
 * 获取用户记录数
 * @return
 */
int getUserCount(); 

}

<?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="cn.smbms.dao.user.UserMapper">

	<!-- List<User> getUserListByMap(Map<String, Object> map); -->
	<!-- 如果传输的是map集合  那么获取对应集合中的信息时 采用根据键获取值#{map的键名} -->
	<select id="getUserListByMap" resultType="User" parameterType="map">
		select *
			from smbms_user
				where userName like CONCAT('%',#{name},'%')
					and userRole = #{roleId}
	</select>

	<!-- List<User> getUserListByUser(User user); -->
	<!-- 如果传输的参数是对象  那么在获取对应对象的属性值时  直接以#{属性名} 获取即可 当然必须保证此属性有getter方法 -->
	<select id="getUserListByUser" resultType="User" parameterType="User">
		select *
			from smbms_user
				where userName like CONCAT('%',#{userName},'%')
					and userRole = #{userRole}
	</select>

	<!-- List<User> getUserListByUsernameAndUserRole(@Param("name")String username,@Param("roleId")int userRole); -->
	<!-- 采用@Param注解 不再需要提供paramterType属性 -->
	<!-- 获取对应值 必须通过@Param注解里的名来获取 -->
	<select id="getUserListByUsernameAndUserRole" resultType="User">
		select *
			from smbms_user
				where userName like CONCAT('%',#{name},'%')
					and userRole = #{roleId}
	</select>

	<!-- int getUserCount();  -->
	<select id="getUserCount" resultType="_int">
		select count(1)
			from smbms_user
	</select>
	
</mapper>

三、掌握resultMap
1. 一般情况下的自定义映射

   ```xml
   	<!-- List<User> getUserListByUsernameAndUserRole(@Param("name")String username,@Param("roleId")int userRole); -->
   	<!-- 采用@Param注解 不再需要提供paramterType属性 -->
   	<!-- 获取对应值 必须通过@Param注解里的名来获取 -->
   	
   	<!-- MyBatis映射是SQL语句和Java对象的映射  如果是查询类SQL  那么映射返回的是将结果集(查询结果) 和 Java对象属性一一对应赋值 -->
   	
   	<!-- 
   		id:标识自定义映射规则的名称
   		type:最终映射成的类型
   	 -->
   	<resultMap type="User" id="user_role">
   		<!-- 专门用于主键映射  设定之后可以提升映射性能 -->
   		<!-- 
   			column:表示数据库单位里的列名
   			property:表示Java对象单位的属性名
   		 -->
   		<id column="id" property="id"/>
   		<!-- 【在一般情况下】自定义映射可以只指定不一样的映射情况  其他的如果列名和属性名还是一致  则依旧自动映射 -->
   		<!-- <result column="userName" property="userName"/>
   		<result column="userCode" property="userCode"/> -->
   		<!-- .... -->
   		<result column="roleName" property="userRoleName"/>
   	</resultMap>
   	
   	<!-- resultMap:自定义映射返回结果(当你的对象和结果集 无法对应的时候<无法自动映射的时候>  可以自行进行映射指定 ) -->
   	<select id="getUserListByUsernameAndUserRole" resultMap="user_role">
   		select u.*,r.roleName as roleName
   			from smbms_user u,smbms_role r
   				where u.userName like CONCAT('%',#{name},'%')
   					and u.userRole = #{roleId}
   						and u.userRole = r.id
   	</select>
   <!-- 	<select id="getUserListByUsernameAndUserRole" resultType="User">
   		select u.*,r.roleName as userRoleName
   			from smbms_user u,smbms_role r
   				where u.userName like CONCAT('%',#{name},'%')
   					and u.userRole = #{roleId}
   						and u.userRole = r.id
   	</select> -->
  1. 复杂类型 一对一asccociation

    	<!-- List<User> getUserListByUsernameAndUserRole(@Param("name")String username,@Param("roleId")int userRole); -->
    	<resultMap type="User" id="user_role">
    		<id column="id" property="id"/>
    		<result column="userCode" property="userCode"/>
    		<!-- 映射类型中对象属性 -->
    		<!-- property:在此类型中的属性名 -->
    		<!-- javaType:最终此属性和哪个类型进行映射 -->
    		<association property="role" javaType="Role">
    			<id column="rid" property="id"/>
    			<result column="roleName" property="roleName"/>
    			<result column="roleCode" property="roleCode"/>
    		</association>	
    	</resultMap>
    	
    	<!-- resultMap:自定义映射返回结果(当你的对象和结果集 无法对应的时候<无法自动映射的时候>  可以自行进行映射指定 ) -->
    	<select id="getUserListByUsernameAndUserRole" resultMap="user_role">
    		select u.*,r.id as rid,r.roleCode as roleCode,r.roleName as roleName,r.createdBy as createdBy
    			from smbms_user u,smbms_role r
    				where u.userName like CONCAT('%',#{name},'%')
    					and u.userRole = #{roleId}
    						and u.userRole = r.id
    	</select>
    
  2. 复杂类型一堆多 collection

    	<resultMap type="User" id="user_address">
    		<id column="id" property="id"/>
    		<!-- 
    			ofType:泛型类型
    		 -->    
    		<collection property="addressList" ofType="Address">
    			<result column="contact" property="contact"/>
    		</collection>
    	</resultMap>
    
    	<!-- List<User> getUserListWithAddressList(@Param("name")String username,@Param("roleId")int userRole); -->
    	<select id="getUserListWithAddressList" resultMap="user_address">
    		select u.*,a.contact,a.addressDesc,a.postCode,a.tel
    			from smbms_user u,smbms_address a
    				where u.id = a.userId
    					and u.userName like CONCAT('%',#{name},'%') 
    						and u.userRole = #{roleId}
    	</select>
    
内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值