Java整理21

1、MyBatis获取参数值***

两种方式***:
	(1)${}本质是字符串拼接(单引号,sql注入)
	(2)#{}本质是占位符赋值
(1)mapper接口方法的参数为单个的字面量类型
(2)mapper接口方法的参数为多个的字面量类型
	select * from t_user where username=#{arg0}/'${param1}' and password =#{arg1}/'${param2}'
(3)若mapper接口方法的参数有多个时,可以手动将这些参数放入一个map中
	自己创建一个map,设置键,存储值,然后再通过键访问
(4)mapper接口方法的参数是实体类类型的参数
	<insert id="insertUser">
		insert into t_user values(null,#{属性名},#{password},#{age},#{sex})
	</insert>
	注意:属性名不是变量名而是get方法中去掉get然后首字母小写的
(5)命名参数
	使用@Param注解(功能=1+2的结合)
	Mapper接口中定义方法
		User checkloginByParam(@param("键")String username_值)
	使用的时候
	(1)使用#{"键"}
	(2)使用#{param}	默认添加

2、MyBatis的各种查询功能

若查出来的结果为多条
	(1)可以通过实体类类型的list接收
	(2)可以通过map类型的list接收
	(3)在mapper接口上添加@Mapkey注解,指定键查询的每一个map数据作为值
	@Mapkey("id")
	Map(String,Object)	getAllUserToMap();
	输出{1={},2={}}

3、模糊查询

(1)直接#{}		不推荐
(2)concat('%',#{},'%')
(3)"%"#{username}"%"

4、批量删除

delete from t_user where id in (${ids})

5、添加功能获取自增的主键

<insert id=" " useGeneratedKeys="true" keyProperty="id">
	sql语句
</insert>
useGeneratedKeys:设置当前标签中的sql使用了自增的主键
keyProperty:将自增的主键的值赋值给传输到映射文件中参数的某个属性

6、自定义

解决字段名与属性名不一致情况	
	(1)为字段起别名保持和属性名一致
	(2)在mybatis_config.xml中使用settings标签,设置全局配置
		<settings>
			//将use_name改为userName
			<setting name="mapUnderscoreToCamelCase" value="true"/>
		</settings>
resultMap	自定义映射
<resultMap id="xxx" type="Emp">
	<id property="属性名" column="字段名"></id>	//主键
	<result property="empName" column="emp_name"></result>	//其它
</resultMap>
<select id="方法名" resultMap="xxx">
	sql
</select>

7、多对一映射关系

(1)级联属性赋值
(2)association
<resultMap id=" " type=" ">
	<id           ></id>
	<result       ></result>
	<association property="dept" javaType="Dept">
		<id property="did' column="did"></id>
		<result property="deptName" column="dept_name"></result>
	</association>
</resultMap>

eg:association	分步查询
员工表	部门表
员工表设置resultMap(将部门对象引入员工对象中)
<association property=部门对象 select=部门查询方法全类名.方法名 column=员工表与部门表对应字段>
</association>
(1)员工表单独查询
(2)部门表单独查询
(3)将部门表查询结果加入员工表中----通过上方select
分步查询优点:
	可以实现延迟加载但必须在核心配置文件中设置全局配置信息
lazyLoadingEnabled:延迟加载的全局开关,开启时所有关联对象都会延迟加载
aggressiveLazyLoading开启时,任何方法的调用都会加载该对象的所有属性,否则每个属性都会按需加载
通过设置association和collection中的fetchType设置当前的分步查询是否使用延迟加载,fetchType="lazy_延迟加载|eager_立即加载",这么设置的前提是开启了全局的延迟加载
多对一:在多的对象中加入一的对象
一对多:在一的对象中加入多的列表
一对多中使用resultMap中的collection标签来处理集合关系
<collection property="emps" ofType="Emp">
		<id           ></id>
	    <result       ></result>
</collection>
ofType:表示该属性所对应的集合中存储数据的类型
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值