1.Mybatis日志
具体选择哪个日志实现由 MyBatis 的内置日志工厂确定。它会使用最先找到的。
Mybatis 内置的日志工厂提供日志功能,具体的日志实现有以下几种方式:
SLF4J|LOG4J|JDK_LOGGINGCOMMONS_LOGGING|STDOUT_LOGGING
配置日志
<settings>
<setting name="logImpl" value="
STDOUT_LOGGING
"/>
</settings>
2.参数传递
单个参数
直接传递
Admin selectAdmins(int id);
多个参数
使用@Param(“id”)绑定
Admin selectAdmins(@Param(“account”)String account,
@Param(“password”)String password);
在Dao层传两个数据时因为mapper中的语句paramtertype中只有一个参数类型,所以传两个以上的参数时可以用@param注解将上图中的xxx放到“account”中去,将yyy放到“password”中。
当然,还可以将account和password放到一个类中,将这个类的对象传过去。
如果传的数据较多在一个对象中可以直接将对象传过去。
这是我们需要将admin对象中的值传递,其中用到
useGeneratedKeys="
把新增加的主键赋值到自己定义的
keyProperty " keyProperty=“
接收主键的属性
parameterType="
参数类型
"
这是我们使用插入语句时可以直接获得admin这个对象在数据库这一行的主键id。
3.增删改查
增添
<insert id="
唯一标识
" useGeneratedKeys="
把新增加的主键赋值到自己定义的
keyProperty " keyProperty=“
接收主键的属性
parameterType="
参数类型
">
insert into
admin(account,password)values(#{account},#{password})
</insert>
删除
<delete id=
"
唯一标识
"
parameterType=
"
参数类型
"
>
delete from admin where id= #{id}
</delete>
修改
<update id=
"
唯一标识
"
parameterType=“
参数类型
">
update
admin set account= #{account},password= #{password} where
id= #{id}
</update>
查询
<select id="
唯一标识
" resultType="
返回结果集类型
">
select *
from admin where id= #{id}
</select>
4.结果集处理
简单类型输出映射
返回简单基本类型
<select id="findAdminInfoCount" resultType="int">
select count(*) from admin
</select>
对象映射
如果表中的类名与类中的属性名完全相同,mybatis会自动将查询结果封装
到POJO对象中.
如果java中使用标准驼峰命名,数据库中使用下划线连接命名,可以开始全局
设置实现自动转换
<setting name="mapUnderscoreToCamelCase" value="true"/>
<select id="findUserInfoById"
parameterType="int"resultType="Admin">
select * from admin where id=#{id}
</select>
mybatis会将查到的信息自动赋值给admin对象
复杂类型输出映射
resutlMap:自定义映射 一般存在多张表时使用包含association(用于一对一),cllection(用于一对多)。
<resultMap id="adminResultMap" type="Admin">
<id column="id" property="id"/>
<result property="account" column="account" />
<result property="password" column="password" />
</resultMap>
(1). resutlMap 的 id 属性是 resutlMap 的唯一标识,本例中定义为
“adminResultMap”
(2). resutlMap 的 type 属性是映射的 POJO 类型
(3). id 标签映射主键,result 标签映射非主键
(4). property 设置对象属性名称,column 映射查询结果的列名称
在学生对象中存在major对象,在查询出结果集时需要major对象中专业的名称,通过resultMap自定义映射先将Student中的 id,num,name,gender赋值之后再通过association把Major对象中的名字赋值给major属性。
在一个major中含有多个student对象,所以使用collection。
嵌套查询
这是先查一个专业表,再查一个学生表信息赋值。
5.{} 和${}区别
#{} 占位符,
是经过预编译的,编译好 SQL 语句再取值
,#方式能够防止 sql 注入
#{}:delete from admin where id=#{id}
结果: delete from admin where id = ?
${}会
将值以字符串形式拼接到 sql 语句
, ${ }方式无法防止 Sql 注入
${}: delete from admin where id=’${id}’
结果: delete from admin where id=’1’
一般是#{ } 向 sql 传值使用, 而使用${ }向 sql 传列名
例如在 order by $ {column} 语句后面可以动态替换列名
6.注解
@Insert : 插入 sql , 和 xml insert sql 语法完全一样
@Select : 查询 sql, 和 xml select sql 语法完全一样
@Update : 更新 sql, 和 xml update sql 语法完全一样
@Delete : 删除 sql, 和 xml delete sql 语法完全一样
@Param : 入参
@Results : 设置结果集合
@Result : 结果
在dao层的方法上面用注解方式对于单张表的简单查询更方便.