1、引言:
Mybatis是⼀个基于java语⾔的持久层的框架,主要⽤来简化数据库的访问操作,内部封装 了原来的jdbc代码,替换了原有项⽬开发中的jdbc技术,他可以⾃动完成对象与关系的映射 (OR),极⼤简化了我们的开发,提⾼开发效率。
2、JDBC中存在的问题
1).⼤量的代码冗余 (处理结果集的时候存在⼤量的冗余)
2).不能完成数据库和实体的⾃动转换 (需要⼿动封装实体,不能⾃定封装实体类)
3、环境搭建:
1)引入核心jar:
2)配置提示文件
window--->preferences
输入"xml ",找到Xml CataLog选项并点击右侧的Add....
在弹出的选项卡中选择本地磁盘上mybatis配置⽂件的提示信息,并输⼊提示的 key
注意:
主配置⽂件:
Public ID: -//mybatis.org//DTD Config 3.0//EN
Address: http://mybatis.org/dtd/mybatis-3-config.dtd
映射⽂件:
Public ID: -//mybatis.org//DTD Mapper 3.0//EN
Address: http://mybatis.org/dtd/mybatis-3-mapper.dtd
3)创建Mybatis的主配置文件
a)在项⽬的src⽬录中⿏标右键,选择new,在搜索中搜索xml 选择XML Basic Template
b)点击下⼀步,在输⼊框中输⼊⽂件的名称 "mybatis-config.xml"
c)点击Next 下⼀步,选择Create XML file from DTD file
d)点击Next 下一步,选择DTD⽂件,选择配置的主配置⽂件的dtd
e)点击Next 下一步,直接finish即可;
生成配置文件如下:
4)书写连接相关的配置
<?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>
<!-- 配置连接相关的参数 -->
<environments default="dev">
<!-- 配置测试环境 -->
<environment id="dev">
<!-- 事务管理方式 Type属性:是否使用事务,固定写为JDBC -->
<transactionManager type="JDBC"/>
<!-- 配置数据源 type属性:是否使用连接池POOLED(是)UNPOOL(不是)-->
<dataSource type="POOLED" >
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL"/>
<property name="username" value="hr"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<!-- 进行注册 -->
<mappers>
<!-- 写UserDaoMapper.xml所在的路径 -->
<mapper resource="com/baizhi/dao/UserDaoMapper.xml" />
</mappers>
</configuration>
5)创建数据库
create table s_user (
id number premary key,
username varchar2(20),
password varchar2(20),
birthday date,
xingzuo varchar2(20),
shuxiang varchar2(20),
);
mapper.xml(在dao包中)
<?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:是mapping所在类的权限定类名 -->
<mapper namespace="com.baizhi.dao.UserDao">
<!--根据id查询 parameterType:传入数据的类型 id:dao中对应的方法名 -->
<select id="selectById" parameterType="Integer" resultType="com.baizhi.entity.User">
select id,username,password,birthday,xingzuo,shuxiang from s_user where id = #{id}
</select>
<!--根据username和password查询 两个数据作为传参,在dao中加入@param绑定数据 resultType:返回值类型-->
<select id="selectByNameAndPassword" resultType="com.baizhi.entity.User">
select id,username,password,birthday,xingzuo,shuxiang from s_user where username=#{username} and password=#{password}
</select>
<!--查询所有 id:dao类中对应的方法名 -->
<select id="selectAll" resultType="com.baizhi.entity.User">
select id,username,password,birthday,xingzuo,shuxiang from s_user
</select>
<!--插入数据 -->
<insert id="insert" parameterType="com.baizhi.entity.User">
insert into s_user values(#{id},#{username},#{password},#{birthday},#{xingzuo},#{shuxiang})
</insert>
<!--更新数据-->
<update id="update" parameterType="com.baizhi.entity.User">
update s_user set username=#{username},password=#{password} where id=#{id}
</update>
<!--删除数据-->
<delete id="delete" parameterType="String">
delete from s_user where username=#{username}
</delete>
</mapper>
书写:entity
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable{
private Integer id;
private String username;
private String password;
private Date bir;
private String xingzuo;
private String shuxiang;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getBir() {
return bir;
}
public void setBir(Date bir) {
this.bir = bir;
}
public String getXingzuo() {
return xingzuo;
}
public void setXingzuo(String xingzuo) {
this.xingzuo = xingzuo;
}
public String getShuxiang() {
return shuxiang;
}
public void setShuxiang(String shuxiang) {
this.shuxiang = shuxiang;
}
public User(Integer id, String username, String password, Date bir,
String xingzuo, String shuxiang) {
super();
this.id = id;
this.username = username;
this.password = password;
this.bir = bir;
this.xingzuo = xingzuo;
this.shuxiang = shuxiang;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password="
+ password + ", bir=" + bir + ", xingzuo=" + xingzuo
+ ", shuxiang=" + shuxiang + "]";
}
}
书写DAO:
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.baizhi.entity.User;
public interface UserDao {
public User selectById(Integer id);
//@param进行数据绑定
public User selectByNameAndPassword(@Param("username")String username,@Param("password")String password);
public List<User> selectAll();
public void insert(User user);
public void update(User user);
public void delete(String username);
}
Test测试类
import java.io.IOException;
import java.io.Reader;
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.baizhi.dao.UserDao;
import com.baizhi.entity.User;
public class TestM {
@Test
public void testSelectById() throws IOException {
//读取配置文件
Reader resourceAsReader = Resources.getResourceAsReader("mybatis-config.xml");
//创建一个sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsReader);
//获取sqlSession连接
SqlSession sqlSession = sqlSessionFactory.openSession();
//通过sqlSession连接获取userdao对象
UserDao userDao = sqlSession.getMapper(UserDao.class);
User user = userDao.selectById(5);
System.out.println(user);
}
@Test
public void testfindByUsernameAndPassword() throws IOException{
UserDao userDao = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml")).openSession().getMapper(UserDao.class);
User user = userDao.selectByNameAndPassword("sqc", "123");
System.out.println(user);
}
@Test
public void testSelectAll() throws IOException{
UserDao userDao = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml")).openSession().getMapper(UserDao.class);
List<User> list = userDao.selectAll();
System.out.println(list);
}
@Test
public void testInsert() throws IOException{
SqlSession sqlSession = null;
try{
Reader resourceAsReader = Resources.getResourceAsReader("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsReader);
sqlSession = sqlSessionFactory.openSession();
UserDao dao = sqlSession.getMapper(UserDao.class);
User user = new User(5,"hzq","123",new Date(),"天平座","鼠");
dao.insert(user);
sqlSession.commit();
}catch(Exception e){
sqlSession.rollback();
throw new RuntimeException("~~~~~~~~~~~~");
}
}
@Test
public void testUpdate() throws IOException{
SqlSession sqlSession = null;
try{
Reader resourceAsReader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSession = new SqlSessionFactoryBuilder().build(resourceAsReader).openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
User user = new User(6,"sqc","123",null,null,null);
userDao.update(user);
sqlSession.commit();
}catch(Exception e){
sqlSession.rollback();
throw new RuntimeException("~~~~~~~~~");
}
}
@Test
public void testDelete() throws IOException{
SqlSession sqlSession = null;
try{
Reader resourceAsReader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSession = new SqlSessionFactoryBuilder().build(resourceAsReader).openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
userDao.delete("hzq");
sqlSession.commit();
}catch(Exception e){
sqlSession.rollback();
throw new RuntimeException("~~~~~~~~~");
}
}
}