mybatis入门程序
1. 导入jar包
2. 创建并配置SqlMapConfig.xml文件
<?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></properties>
全局参数设置
<settings></settings>
类型别名
<typeAliases></typeAliases>
类型处理器
<typeHandles></typeHandles>
对象工厂
<objectFactory></objectFactory>
插件
<plugins></plugins>
以上属性在后边会详细讲解到,现在我们就只需要关注一下下面的配置即可
如下所配置的就是使用这点东西。
environments(环境信息集合)
environment(单个环境信息)
transactionManager(事物)
dataSource(数据源)
environment
environments
mappers(映射器)
-->
<!-- 和Spring整合后environments配置将废除 -->
<!-- 配置mybatis的环境信息 -->
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用dbcp连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis1?useUnicode=true&characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 加载mapper映射文件 -->
<mappers>
<mapper resource="sqlmap/UserMapper.xml"/>
</mappers>
</configuration>
3. 创建UserMapper.xml映射文件
4. 创建实体类
/*
* CREATE TABLE `user` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(255) NOT NULL,
`user_birth` date DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
*/
5. 根据用户id查询用户
(1)UserMapper.xml文件配置
<!-- 通过select标签执行数据库查询语句
- id属性:标识映射文件(UserMapper.xml)中的SQL
将SQL语句封装到mapperStatement对象中,故id称为statement的id
- parameterType属性:指定输入参数的类型
- #{}标识一个占位符
- #{id}:id标识接收的输入参数,参数名称是id;如果输入参数是简单类型,#{}中参数名可以任意
- resultType属性:指定输出结果的类型
-->
<select id="selectUserById" parameterType="java.lang.Integer" resultType="com.wzw.day1.model.User">
SELECT * FROM `user` WHERE user_id = #{id}
</select>
(2)Dao层
/**
* 入门案例1
* 根据id查询用户信息
* @throws IOException
*/
@Test
public void test1() throws IOException {
//获取mybatis配置文件
String resource = "SqlMapConfig.xml";
//获取配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//通过SqlSession操作数据库
//第一个参数:namespace+"."+id
//第二个参数:parameterType
//return:resulteType
User user = sqlSession.selectOne("rumen1.selectUserById", 1);
System.out.println(user);
//释放资源
sqlSession.close();
}
6. 根据用户名模糊查询
(1)UserMapper.xml映射文件
<!-- 根据用户名模糊查询
- resultType属性:指定单条记录所映射的Java对象类型
- ${}:拼接字符串,将接收的输入参数拼接在SQL中
可能引起SQL注入
- ${value}:如果接收的输入参数是简单类型,${}中只能使用value
-->
<select id="selectUserByName" parameterType="java.lang.String" resultType="com.wzw.day1.model.User">
SELECT * FROM `user` WHERE user_name like '%${value}%'
</select>
(2)Dao层
/**
* 入门案例2
* 根据用户名模糊查询用户信息
* @throws IOException
*/
@Test
public void test2() throws IOException {
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> list = sqlSession.selectList("rumen1.selectUserByName", "小明");
System.out.println(list);
sqlSession.close();
}
7. 添加用户
(1)UserMapper.xml映射文件
<!-- 添加用户
- parameterType属性:指定输入参数类型User
- #{}:指定User类属性名,mybatis通过ognl获取对象属性值
-->
<insert id="insertUser" parameterType="com.wzw.day1.model.User">
<!-- 获取自增主键
- SELECT LAST_INSERT_ID()
- keyProperty属性:将查询到的主键值设置到parameterType指定的对象属性中
- order属性:SELECT LAST_INSERT_ID()函数执行顺序
- resultType属性:输出结果类型
-->
<selectKey keyProperty="user_id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO `user`(user_name, user_birth) VALUE (#{user_name},#{user_birth})
</insert>
(2)Dao层
/**
* 入门案例3
* 添加用户
* @throws IOException
*/
@Test
public void test3() throws IOException {
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setUser_name("张三");
user.setUser_birth(new Date());
sqlSession.insert("rumen1.insertUser", user);
//获取插入用户id
System.out.println(user.getUser_id());
//提交事务
sqlSession.commit();
sqlSession.close();
}
8. 删除用户
(1)UserMapper.xml映射文件
<!-- 根据用户id删除 -->
<delete id="deleteUserById" parameterType="java.lang.Integer">
DELETE FROM `user` WHERE user_id = #{value}
</delete>
(2)Dao层
/**
* 入门案例4
* 根据用户id删除用户
* @throws IOException
*/
@Test
public void test4() throws IOException {
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//删除用户
List<User> list = sqlSession.selectList("rumen1.selectUserByName2", "张三");
User user = list.get(0);
System.out.println(user);
sqlSession.delete("rumen1.deleteUserById", user.getUser_id());
//提交事务
sqlSession.commit();
sqlSession.close();
}
9. 更新用户
(1)UserMapper.xml映射文件
<!-- 根据用户id更新 -->
<update id="updateUserById" parameterType="com.wzw.day1.model.User">
UPDATE `user` SET user_name = #{user_name} WHERE user_id = #{user_id}
</update>
(2)Dao层
/**
* 入门案例5
* 根据用户id更新用户
* @throws IOException
*/
@Test
public void test5() throws IOException {
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//更新用户
User user = new User();
user.setUser_id(4);
user.setUser_name("张三");
user.setUser_birth(new Date());
sqlSession.update("rumen1.updateUserById", user);
//提交事务
sqlSession.commit();
sqlSession.close();
}
mybatis的mapper接口(相当于dao接口)代理开发方法
<select id="selectUserById" parameterType="java.lang.Integer" resultType="com.wzw.day1.model.User">
SELECT * FROM `user` WHERE user_id = #{value}
</select>
public User selectUserById(Integer user_id) throws Exception;
1. UserMapper.java
public interface UserMapper {
//根据id查询用户
//<select id="selectUserById" parameterType="java.lang.Integer" resultType="com.wzw.day1.model.User">
public User selectUserById(Integer user_id) throws Exception;
//根据用户名模糊查询
//<select id="selectUserByName" parameterType="java.lang.String" resultType="com.wzw.day1.model.User">
public List<User> selectUserByName(String user_name) throws Exception;
//添加用户
//<insert id="insertUser" parameterType="com.wzw.day1.model.User">
public void insertUser(User user) throws Exception;
//删除用户
//<delete id="deleteUserById" parameterType="java.lang.Integer">
public void deleteUserById(Integer user_id) throws Exception;
//更新用户
//<update id="updateUserById" parameterType="com.wzw.day1.model.User">
public void updateUserById(User user) throws Exception;
}
2. UserMapper.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">
<!-- namespace命名空间,作用就是对SQL进行分类化管理(SQL隔离)
注:使用mapper代理方法开发,namespace为Mapper接口名称
-->
<mapper namespace="com.wzw.day1.mapper.UserMapper">
<!-- 通过select标签执行数据库查询语句 -->
<select id="selectUserById" parameterType="java.lang.Integer" resultType="com.wzw.day1.model.User">
SELECT * FROM `user` WHERE user_id = #{value}
</select>
<!-- 根据用户名模糊查询 -->
<select id="selectUserByName" parameterType="java.lang.String" resultType="com.wzw.day1.model.User">
SELECT * FROM `user` WHERE user_name like '%${value}%'
</select>
<!-- 根据用户名查询用户 -->
<select id="selectUserByName2" parameterType="java.lang.String" resultType="com.wzw.day1.model.User">
SELECT * FROM `user` WHERE user_name = #{value}
</select>
<!-- 添加用户 -->
<insert id="insertUser" parameterType="com.wzw.day1.model.User">
<!-- 获取自增主键 -->
<selectKey keyProperty="user_id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO `user`(user_name, user_birth) VALUE (#{user_name},#{user_birth})
</insert>
<!-- 根据用户id删除 -->
<delete id="deleteUserById" parameterType="java.lang.Integer">
DELETE FROM `user` WHERE user_id = #{value}
</delete>
<!-- 根据用户id更新 -->
<update id="updateUserById" parameterType="com.wzw.day1.model.User">
UPDATE `user` SET user_name = #{user_name} WHERE user_id = #{user_id}
</update>
</mapper>
3. TestDemo1.java
public class TestDemo1 {
/**
* 根据用户id查询
* @throws Exception
*/
@Test
public void test1() throws Exception {
//获取mybatis配置文件
String resource = "SqlMapConfig.xml";
//获取配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//创建UserMapper对象,mybatis自动生成
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.selectUserById(1);
System.out.println(user);
//释放资源
sqlSession.close();
}
/**
* 根据用户名模糊查询
* @throws Exception
*/
@Test
public void test2() throws Exception {
//获取mybatis配置文件
String resource = "SqlMapConfig.xml";
//获取配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//创建UserMapper对象,mybatis自动生成
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> list = mapper.selectUserByName("小");
System.out.println(list);
//释放资源
sqlSession.close();
}
/**
* 添加用户
* @throws Exception
*/
@Test
public void test3() throws Exception {
//获取mybatis配置文件
String resource = "SqlMapConfig.xml";
//获取配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setUser_name("wzw");
user.setUser_birth(new Date());
//创建UserMapper对象,mybatis自动生成
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.insertUser(user);
//提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
/**
* 删除用户
* @throws Exception
*/
@Test
public void test4() throws Exception {
//获取mybatis配置文件
String resource = "SqlMapConfig.xml";
//获取配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//创建UserMapper对象,mybatis自动生成
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUserById(8);
//提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
/**
* 更新用户
* @throws Exception
*/
@Test
public void test5() throws Exception {
//获取mybatis配置文件
String resource = "SqlMapConfig.xml";
//获取配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//创建UserMapper对象,mybatis自动生成
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.selectUserById(6);
user.setUser_name("测试1");
mapper.updateUserById(user);
//提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
}
mybatis配置文件SqlMapConfig.xml
<!--
属性
<properties></properties>
全局参数设置
<settings></settings>
类型别名
<typeAliases></typeAliases>
类型处理器
<typeHandles></typeHandles>
对象工厂
<objectFactory></objectFactory>
插件
<plugins></plugins>
以上属性在后边会详细讲解到,现在我们就只需要关注一下下面的配置即可
如下所配置的就是使用这点东西。
environments(环境信息集合)
environment(单个环境信息)
transactionManager(事物)
dataSource(数据源)
environment
environments
mappers(映射器)
-->
properties(加载属性文件)
<!-- 加载属性文件 -->
<properties resource="db.properties"></properties>
settings(全局参数设置):
开启二级缓存,开启延迟加载
typeAliases(类型别名)
<!-- 设置别名 -->
<typeAliases>
<!-- 针对单个对象定义 -->
<!-- <typeAlias type="com.wzw.day1.model.User" alias="user"/> -->
<!-- 批量定义 (mybatis自动扫描包下类,定义别名,别名为类名)-->
<package name="com.wzw.day1.model"/>
</typeAliases>
typeHandlers(类型处理器)
environments(环境)
<!-- 和Spring整合后environments配置将废除 -->
<!-- 配置mybatis的环境信息 -->
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用dbcp连接池 -->
<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>
mapper(映射配置)
<!-- 加载mapper映射文件 -->
<mappers>
<!-- mapper标签resource属性:一次加载一个映射文件 -->
<mapper resource="sqlmap/User.xml"/>
<!-- <mapper resource="mapper/UserMapper.xml"/> -->
<!-- mapper标签class属性:通过mapper接口加载映射文件
规范:mapper接口名与mapper.xml文件名保持一致,且在同一目录下
-->
<!-- <mapper class="com.wzw.day1.mapper.UserMapper"/> -->
<!-- 批量加载mapper
指定mapper接口包名,mybatis自动扫描包下所有的mapper接口
规范:mapper接口名与mapper.xml文件名保持一致,且在同一目录下
-->
<package name="com.wzw.day1.mapper"/>
</mappers>