Mybatis入门(三)-----类型转化器(Java类型到JDBC类型的转化)
半ORM框架,对象关系映射框架
总结起来就是一个pojo类我们对应着一个mapper.xml文件,将一个个对象和数据库表的字段对应起来,使我们通过操作对象来操作数据库,这样的话,只需要去关注写sql,操作简单。
就是表字段和pojo类属性的直接关联,通过namespace和xml配置文件的标签id确定唯一的sql语句去执行。
流程过程
- 第一步: 导入jar包,一般我们仅仅需要mybatis就够了,简单的话,不需要他的一些依赖包,再加上数据库驱动包,一共两个
- 第二步: 我们肯定是需要一个对象类,也就是常说的pojo类,用它来了Mapper文件进行映射;下面的User类
- 第三步:建立一个Mybatis-config.xml文件(这里就不一句一句解释配置文件的信息了,基本都能看懂)
- 第四步: Mapper文件,这里直接把mapper文件和pojo类放一个包中,进行映射比较直观。
- 第五步: 测试类:
- 1. 读取Mybatis_config.xml文件,读取的话用Resources.getResourceAsReader("Mybaitis_config.xml");得到一个 Reader对象
- 2. 用SqlsessionFactory 的子类SqlsessionFactroyBulider.bulider()方法传入一个Reader对象
- 3. 用SessionFactory打开整个sessionfactory.
- 4. 拿到statement (就是要执行的操作: 一个字符传mapper文件的namespace.标签的id名)确定一条唯一的sql语 句。
- 5. 用session去执行statement
- 6. 重点重点: jdbc事务操作的话我们一定要手动提交;
最简单的一个基础案例:
1. 创建一个User的java pojo类
package Pojo;
public class User {
private int id;
private String name;
private int age;
private String work;
public User() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getWork() {
return work;
}
public void setWork(String work) {
this.work = work;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + ", work="
+ work + "]";
}
}
2. 配置数据库链接池
<?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="development">
<environment id="development">
<!-- 事务处理JDBC -->
<transactionManager type="JDBC" />
<!-- 连接池的方式 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/hibenate_01" />
<property name="username" value="root" />
<property name="password" value="451334131" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="Pojo/UserMapperTest.xml" />
</mappers>
</configuration>
3. 配置映射关系如下
<?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="Pojo.UserMapperTest">
<select id="selectUserbyid" parameterType="int" resultType="Pojo.User">
select * from systemuser where id = #{id}
</select>
<select id="selectall" resultType="Pojo.User">
select * from systemuser
</select>
<insert id="adduser" parameterType="Pojo.User" >
insert into systemuser(id,name,age,work) values(#{id},#{name},#{age},#{work})
</insert>
<update id="updateone" parameterType="Pojo.User">
update systemuser set work=#{work},name=#{name},age =#{age} where id = #{id}
</update>
</mapper>
4. 测试类
package Test;
import java.io.IOException;
import java.io.Reader;
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 Pojo.User;
public class test {
/**
* @param args
* @throws IOException
*
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//需要加载数据源,加载config文件
Reader reader = Resources.getResourceAsReader("Mybaitis_config.xml");
//SqlSessionFactory
SqlSessionFactory sessionfactroy = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionfactroy.openSession();
/* 查id为1的值
String statement = "Pojo.UserMapperTest.selectUserbyid";
User user = session.selectOne(statement,1);
*/
// 查询所有数据
String Statement = "Pojo.UserMapperTest.selectall";
List<User> lists = session.selectList(Statement);
System.out.println(lists);
/*增加一条数据
String statement = "Pojo.UserMapperTest.adduser";
User user= new User();
user.setId(3); user.setName("徐盼盼"); user.setAge(20);user.setWork("测试开发");
int count = session.insert(statement, user);
session.commit();
System.out.println("增加"+count+"条数据");
*/
/*
String statement = "Pojo.UserMapperTest.updateone";
User user= new User();
user.setId(3);
user.setName("徐盼盼"); user.setAge(20);user.setWork("java开发");
int count = session.update(statement,user);
session.commit();
System.out.println("更新"+count+"条数据");
*/
session.close();
}
}