mybatis-01原始Dao开发方式
1. 下载jar包
mybaits的代码由github.com管理
下载地址:https://github.com/mybatis/mybatis-3/releases
2. 加入配置文件
1. log4j.properties
mybatis默认使用log4j作为输出日志信息。
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# 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
2.创建SqlMapConfig.xml
SqlMapConfig.xml是mybatis核心配置文件,配置文件内容为数据源、事务管理。
<?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">
<property name="jdbc.username" value="fbd"/>
<property name="jdbc.password" value="root"/>
</properties>
<!-- 别名的使用 -->
<typeAliases>
<!-- 单个别名定义,别名的使用,不区分大小写 -->
<!-- <typeAlias type="com.bo.User" alias="user"/> -->
<!-- 别名包扫描器:别名是类的全称,不区分大小写,推荐方式 -->
<package name="com.bo"/>
</typeAliases>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url"
value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<!-- 映射文件包扫描,推荐方式:
1、接口文件必须与映射文件同一目录下
2、接口文件名称必须与映射文件的名称一致 -->
<package name="com.mapper"/>
</mappers>
</configuration>
3.创建db.properties
配置数据路连接信息文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
jdbc.username=fbd
jdbc.password=root
3.创建pojo
pojo类作为mybatis进行sql映射使用,po类通常与数据库表对应
Public class User {
private int id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址
get/set省略。。。
3. sql映射文件
在config下的sqlmap目录下创建sql映射文件User.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">
<!-- 写Sql语句 -->
<mapper namespace="user">
<!-- id:statement的id 或者叫做sql的id-->
<!-- parameterType:声明输入参数的类型 -->
<!-- resultType:声明输出结果的类型,应该填写pojo的全路径 -->
<!-- #{}:输入参数的占位符,相当于jdbc的? -->
<!-- ${}: 注意是字符串拼接指令(可拼接),如果入参为普通数据类型(int,String,double...){}只能填value,如果是pojo,则填写相应的pojo类即可 -->
<!-- 通过ID查询一个用户 -->
<select id="findUserById" parameterType="Integer" resultType="com.bo.User">
select * from user where id = #{id}
</select>
<!-- 通过姓名查询一个用户 -->
<!-- resultType: 如果返回结果为集合,只需这只为每一个的数据类型 -->
<select id="getUserByUserName" parameterType="String" resultType="com.bo.User">
select * from `user` where `username` LIKE '%${value}%'<!-- 注意:这里要加上单引号,作为字符串 -->
</select>
<!-- 插入用户 -->
<!-- userGeneratedKey:使用自增 keyProperty与之配套使用,这里是user的主键 -->
<insert id="insertUser" parameterType="com.bo.User" useGeneratedKeys="true" keyProperty="id">
<!--
selectKey : 主键返回
keyProperty:user中的主键属性
resultType:主键数据类型
order:指定selectKey何时执行:AFTER为 insert执行之后执行。
-->
<!-- <selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID();
</selectKey> -->
INSERT INTO `user`
(`username`,
`birthday`,
`sex`,
`address`)
VALUES (#{username},
#{birthday},
#{sex},
#{address});
</insert>
<!-- 更新用户 -->
<update id="updateUser" parameterType="com.bo.User">
UPDATE
`user`
SET
`username` = #{username}
WHERE `id` = #{id} ;
</update>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType = "int">
DELETE
FROM `user`
WHERE `id` = #{id}
</delete>
</mapper>
4.加载sql映射文件
mybatis框架需要加载Mapper.xml映射文件
将users.xml添加在SqlMapConfig.xml,如下:
5.测试
步骤如下:
- 创建SqlSessionFactoryBuilder对象
- 加载SqlMapConfig.xml配置文件
- 创建SqlSessionFactory对象
- 创建SqlSession对象
- 执行SqlSession对象执行查询,获取结果User
- 打印结果
- 释放资源
package test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
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 org.junit.Test;
import com.bo.Orders;
import com.bo.User;
import com.util.SqlSessionFactoryUtils;
public class MybatisTest {
@Test
public void testGetUserById() throws IOException {
//1.创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
//2.创建核心配置文件的输入流
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//3.通过输入流创建SqlSessionFactory对象(sqlsession工厂对象)
SqlSessionFactory build = ssfb.build(resourceAsStream);
//4.通过sqlsession工厂创建sqlsession对象
SqlSession sqlSession = build.openSession();
//执行查询,参数一: sql id 参数二: 入参
User user = sqlSession.selectOne("user.findUserById", 10);
System.out.println(user);
//使用完释放资源
sqlSession.close();
resourceAsStream.close();
}
@Test
public void testGetUserByUserName() {
//获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> userList = sqlSession.selectList("user.getUserByUserName", "张");
for(User user: userList) {
System.out.println(user);
}
// 释放资源
sqlSession.close();
}
@Test
public void testInsertUser() {
//获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setUsername("萧峰");
user.setSex("男");
user.setBirthday(new Date());
user.setAddress("南斯拉夫");
sqlSession.insert("user.insertUser", user);
System.out.println(user+"==============");
//提交事务
sqlSession.commit();
// 释放资源
sqlSession.close();
}
@Test
public void testUpdateUser() {
//获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setId(31);
user.setUsername("萧峰大虾哈嘿");
//user.setSex("男");
//user.setBirthday(new Date());
user.setAddress("南斯拉夫北极熊");
sqlSession.update("user.updateUser", user);
//提交事务
sqlSession.commit();
// 释放资源
sqlSession.close();
}
@Test
public void testDeleteUser() {
//获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setId(27);
sqlSession.delete("user.deleteUser", user);
//提交事务
sqlSession.commit();
// 释放资源
sqlSession.close();
}
}