MyBatis環境搭建:web專案的建立流程
阿新 • • 發佈:2019-01-07
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();
}
}
}