mybatis简单入门
1.mybatis:
MyBatis官网:http://www.mybatis.org/mybatis-3/zh,
框架包下载地址:https://github.com/mybatis/mybatis-3/releases
MyBatis是Apache软件基金会下的一个开源项目,前身是iBatis框架。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射
2.MyBatis的ORM方式
Object Relational Mapping 对象关系映射
mybatis两种映射方式:
1.通过配置文件
2.通过注解
一、mybatis简单crud操作
实现步骤:
1.准备数据
2.创建maven项目
- 项目完整结构如下:
3.在pom文件中导入依赖
<dependencies>
<!--导入mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!--导入mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!--junit测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--日志包-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
4.实体类
- 定义User类(根据创建的数据库表字段名及类型来定义)
- src\main\java\com\sjava\pojo\User.java
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
省略 构造 get set 等方法........
}
5.DAO层(数据访问层)
- 就是定义一个UserMapper接口
- src\main\java\com\sjava\dao\UserMapper.javar
public interface UserMapper {
/**
* 定义查询所有人员信息的方法
* 返回值是从数据库中查询的信息封装成了User对象 存储到List集合中
*/
List<User> selectAll();
/**
* 根据id查询信息
* @param id
* 返回值是一个User对象
*/
User selectById(Integer id);
/**
* 修改信息
* @param user
* 返回值影响行数 int
*/
int update(User user);
/**
* 根据ID删除用户
* @param id
* 返回值影响行数 int
*/
int delete(Integer id);
/**
* 添加新用户
* @param user
* 返回值影响行数 int
*/
int insert(User user);
}
6.接口映射文件
- 就是定义UserMapper.xml 接口映射文件 与哪个接口映射
- src\main\resources\userMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!--上方是文档声明-->
<!--
代表引入的约束。 引入的是dtd约束
-->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
映射文件
mapper 映射
UserMapper.xml 跟 UserMapper.java产生映射
属性:namespace 当前xml与哪个接口产生映射
-->
<mapper namespace="com.sjava.Dao.userMapper">
<!-- select 标签代表进行的查询的动作
id属性:
代表你映射的是哪个方法
resultType
查询的结果封装的类型
执行的sql语句写在 标签体中
-->
<!--查询所有-->
<select id="selectAll" resultType="com.sjava.pojo.User">
select * from t_user;
</select>
<!--根据id查询-->
<select id="selectById" resultType="com.sjava.pojo.User" parameterType="java.lang.Integer">
select * from t_user where id=#{id}
</select>
<!--修改用户信息-->
<update id="update" parameterType="com.sjava.pojo.User">
update t_user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update>
<!--根据id删除-->
<delete id="delete" parameterType="java.lang.Integer">
delete from t_user where id=#{id}
</delete>
<!--添加用户-->
<insert id="insert" parameterType="com.sjava.pojo.User">
insert into t_user values(null,#{username},#{birthday},#{sex},#{address})
</insert>
</mapper>
6.核心配置文件
- src\main\resources\mybatis-config.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>
<!--这是用于配置日志 -->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!--当前使用的环境-->
<environments default="development">
<!--开发环境的配置-->
<environment id="development">
<!--事务管理选择 使用JDBC的事务管理控制connection连接对象控制 -->
<transactionManager type="JDBC"/>
<!--选择使用连接池 mybatis内置连接池-->
<dataSource type="POOLED">
<!--连接池四大配置信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/study_mybatis_01_01?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--完成映射文件加载-->
<mappers>
<!--Mapper里面 resource对应的是 相应的xml文件-->
<mapper resource="userMapper.xml"/>
</mappers>
</configuration>
7.测试
- 在测试模块中编写测试类test/java/com.sjava.test/MybatisTest
- 这里简单测试一下查询所有功能
/**
* 测试mybatis
*/
public class MybatisTest {
//1. 读取核心配置文件
InputStream inputStream =
Resources.getResourceAsStream("mybatis-config.xml");
/*
2.
通过 SqlSessionFactoryBuilder 工厂构建者
构建一个 sqlSessionFactory会话工厂
*/
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
/*
3:
通过会话工厂得到SqlSession会话对象
*/
SqlSession sqlSession = factory.openSession();
/*
4:
采用 动态代理形式 完成 UserMapper实现类的创建
得到该接口代理对象
*/
UserMapper userMapper =
sqlSession.getMapper(UserMapper.class);
//5.调用方法 完成查询操作
List<User> users = userMapper.selectAll();
for (User user : users) {
System.out.println(user);
}
//6. 释放资源,关闭会话
session.close();
}