MyBatis:web项目的创建
作用:对底层的JDBC进行封装
优点:使用 MyBatis 不用编写Dao实现类,只用写sql命令就好
一、环境搭建
- 导jar包
- 建数据库表
create table `user`(
`id` varchar(64) NOT NULL COMMENT 'ID',
`name` varchar(255) NOT NULL COMMENT '姓名',
`age` int NOT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
- 编写实体类
public class UserEntity {
private String id; // ID
private String name; // 姓名
private String age; // 年龄
//set、get、toString方法
......
}
- 编写Mapper文件
文件作用:编写需要执行的SQL命令
在框架的xml文件中,只要是自己写的类,就要写成全路径
<?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="dao.UserDao">
<sql id="userColumns">
a.id AS "id",
a.name AS "name",
a.age AS "age"
</sql>
<sql id="userJoins"></sql>
<!-- 查所有用户:select * from user; -->
<select id="findAllList" resultType="User">
SELECT
<include refid="userColumns"/>
FROM user a
<include refid="userJoins"/>
</select>
<!-- 查 未删除 的用户: select * from user where del_flag = 0; -->
<select id="findList" resultType="User">
SELECT
<include refid="userColumns"/>
FROM user a
<include refid="userJoins"/>
<where>
a.del_flag = #{DEL_FLAG_NORMAL}
</where>
</select>
<!-- 根据 ID 查用户:select * from user where id = 1; -->
<select id="get" resultType="User">
SELECT
<include refid="userColumns"/>
FROM user a
<include refid="userJoins"/>
WHERE a.id = #{id}
</select>
<!-- 添加用户: insert into user values(default, 'xxacker', 18); -->
<insert id="insert">
INSERT INTO user(id, name, age)
VALUES (#{id}, #{name}, #{age})
</insert>
<!-- 更新用户:update user set name = 'xxa', age = 19 where id = 1; -->
<update id="update">
UPDATE user SET
name = #{name},
age = #{age}
WHERE id = #{id}
</update>
<!-- 删除用户:delete from user where id = 1; -->
<update id="delete">
DELETE FROM user WHERE id = #{id}
</update>
</mapper>
- 在src下新建全局配置文件(编写JDBC)mybatis.xml文件
5.1 在全局配置文件中引入dtd或scheme
导入dtd后,在书写web.xml文件时会有提示。。。
xml文件不导入dtd文件,没有提示。。。
<?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>
<settings>
<!-- changes from the defaults -->
<setting name="lazyLoadingEnabled" value="false" />
</settings>
<typeAliases>
<!-- 这里给实体类取别名,方便在mapper配置文件中使用 -->
<typeAlias alias="User" type="entity.UserEntity"/>
</typeAliases>
<!-- default 引用 environment 的 id,当前所使用的环境 -->
<environments default="default">
<!-- 声明可以使用的环境 -->
<environment id="default">
<!-- 使用原生 JDBC 事务 -->
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
<property name="username" value="root"/>
<property name="password" value="smallming"/>
</dataSource>
</environment>
</environments>
<!-- 这里添加的是执行CRUD操作的接口对应的配置文件(xml文件) -->
<mappers>
<mapper resource="com/bjsxt/mapper/FlowerMapper.xml"/>
</mappers>
</configuration>
- 测试文件:
//相当于Service层
public class Test{
private static UserDao userDao;
private static Reader reader;
private static SqlSessionFactory sessionFactory;
private static SqlSession session = null;
public static void main(String[] args){
// Session Factory
Initialize("mybatis_config.xml");
try{
List<UserEntity> userList = userDao.findAllList();
for(UserEntity user:userList){
System.out.println("ID:" + user.getId()
+"Name:" + user.getName()
+"Age:" + user.getAge());
}
session.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
private static void Initialize(String configFile){
try {
//通过流的方式,把 MyBatis 的配置读入内存
reader = Resources.getResourceAsReader(configFile); //加载配置文件
//前面是工厂-> 实例化对象时,是构建者设计模式,标识:Builder()
sessionFactory = new SqlSessionFactoryBuilder().build(reader); //读取配置信息
session = sessionFactory.openSession(); //session中封装了全部的CRUD
userDao = session.getMapper(UserDao.class); //相当于一个实现抽象类UserDao
} catch (Exception e) {
e.printStackTrace();
}
}
}