1.更新和删除操作
和保存操作的开发流程一致,在完成了保存操作之后,更新和删除操作一样可以实现
dao 中更新的实现
@Override
public void update(User u) {
try {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
SqlSession session = fac.openSession();
session.update("cn.wolfcode.mybatis.mapper.UserMapper.update", u);
session.commit();
session.close();
} catch (Exception e) {
e.printStackTrace();
}
}
更新在 mapper 中的 SQL
<update id="update">
update user
set
name=#{name}, age = #{age}, salary = #{salary}, hiredate = #{hiredate}
where
id = #{id}
</insert>
dao 中删除的实现
@Override
public void delete(long id) {
try {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
SqlSession session = fac.openSession();
session.delete("cn.wolfcode.mybatis.mapper.UserMapper.delete", id);
session.commit();
session.close();
} catch (Exception e) {
e.printStackTrace();
}
}
删除在 mapper 中的 SQL
<delete id="delete">
delete from user where id = #{id}
</delete>
注意:
1 当传入的只有一个普通类型(一个值)的时候#{} 中的名称可以随便写,但是建议见名知义
2 不管使用的是 insert 方法还是 delete 方法,底层调用的还是update方法,通过sql语句来区别dml操作
2.查询
@Override
public List<User> selectList() {
List<User> users = null;
try {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
SqlSession session = fac.openSession();
users =
session.selectList("cn.wolfcode.mybatis.mapper.UserMapper.selectAll");
session.close();
} catch (Exception e) {
e.printStackTrace();
}
return users;
}
mapper 中的 SQL
<select id="selectAll" resultType="cn.wolfcode.mybatis.domain.User">
select * from user
</select>
3.细节处理-类型别名

<!-- 自定义某个 javaBean 的封装规则
type:自定义规则中JavaBean类型的全路径,可用别名
id:唯一id方便引用 -->
<resultMap type="myUser" id="myUserResultMap">
<!-- 指定主键列的封装规则,用 id 标签定义主键会底层有优化
column:指定哪一列
property:指定对应的javaBean属性 -->
<id column="id" property="id"/>
<!-- 定义普通列封装规则 -->
<result column="name" property="name"/>
<!-- 其他不指定的列会自动封装:建议只要写 resultMap 就把全部的映射规则都写上 -->
<result column="age" property="age"/>
</resultMap>
<!-- 使用 resultMap,不使用 resultType -->
<select id="selectMyUserById" resultMap="myUserResultMap" parameterType="integer">
select * from myuser where id = #{id}
</select>
在查询操作中, 我们需要使用result属性指定数据封装的类型, 这里的值类型的全限定名, 每次都编写的话
比较麻烦,为了简化这里的配置,我们可以在主配置文件(mybatis-config.xml)中对指定的类型做别名的配置
<!-- 为指定包中的类来生成别名,默认是类的简单名称 -->
<typeAliases>
<package name="cn.wolfcode.mybatis.domain"/>
</typeAliases>
如此,我们在查询的SQL中, 使用类的全限定名和使用别名是等价的
<select id="selectAll" resultType="cn.wolfcode.mybatis.domain.User">
select * from user
</select>
修改后:
<select id="selectAll" resultType="User">
select * from user
</select>
4.日志管理
在持久层的开发过程中,我们程序员需要随时观察SQL的执行情况,如果sql有问题,我们能够及时发现
所以,如果能够在控制台中将我们执行的SQL全部打印出来,那么就可以方便的观察SQL的相关问题
配置日志文件监控MyBatis的运行.
- 将日志相关的jar包添加到项目中
- 在resources(source folder)中创建配置文件, log4j.properties ,添加下面的内容(直接拷贝)
- 将配置中的 包路径修改为项目中对应的路径,我们这里可以使用: cn.wolfcode.mybatis
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# 配置要打印日志的包
log4j.logger.cn.wolfcode.mybatis=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
5.抽取工具类
package maosi.util;
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 java.io.IOException;
import java.io.InputStream;
public class MybatisUtil {
static SqlSessionFactory sqlSessionFactoryBuilder = null;
static {
try {
InputStream resourceAsStream = null;
resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder().build(resourceAsStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSession(){
return sqlSessionFactoryBuilder.openSession();
}
}
6.配置文件
加载配置文件
<properties resource="db.properties"/> 加载配置文件
使用配置文件
<property name="driver" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
<?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>
<properties resource="db.properties"/>
<environments default="dev">
<environment id="dev">
<!--
MyBatis 内置的事务管理器
JDBC:org.apache.ibatis.transaction.jdbc.JdbcTransaction的别名
-->
<transactionManager type="JDBC"/>
<!--
MyBatis 内置的连接池
POOLED:org.apache.ibatis.datasource.pooled.PooledDataSource的别
名
-->
<dataSource type="POOLED">
<!--
driver:这是POOLED连接池对象的驱动类的属性名,
Druid连接池对象的驱动类属性名是driverClassName
-->
<property name="driver" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="maosi/mapper/UserMapper.xml"/>
<mapper resource="maosi/mapper/StudentMapper.xml"/>
</mappers>
</configuration>
Comments | NOTHING