发表于: 2017-11-08 21:46:43
2 841
今天学习的内容
mybatis总结
什么是mybatis
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.
orm工具的基本思想
1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
2. 由sessionfactory 产生 session
3. 在session 中完成对数据的增删改查和事务提交等.
4. 在用完之后关闭session 。
5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
首先搭建开发环境
1.在mysql数据库中创建表,表结构如下

2. 设置mybatis 配置文件:Configuration.xml, 放在resources路径下,内容如下:
<?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>
<typeAliases>
<typeAlias alias="BmbTest" type="mybatis.model.BmbTest" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/fyc" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- // 文件路径配置 -->
BmbTest.xml位于resources这个包下,所以BmbTest.xml(IDEA中,resources包是默认的配置文件路径,所有指定路径的时候不需要把resources包名写出来-->
<mapper resource="BmbTest.xml" />
</mappers>
</configuration>
3. 建立与数据库对应的 java class,以及映射文件.
在mabatis.model路径下建立BmbTest 类:
package mybatis.model;
import com.sun.xml.internal.bind.v2.model.core.ID;
public class BmbTest {
// 实体类的属性和表的字段名称一一对应
private int id;
private String name;
private String sex;
private int age;
private String adress;
private String study;
public void setId(int id){
this.id=id;
}
public int getId(){
return id;
}
public void setName(String name){
this.name=name;
}
public String getName() {
return name;
}
public void setSex(String sex){
this.sex=sex;
}
public String getSex() {
return sex;
}
public void setAge(int age){
this.age=age;
}
public int getAge() {
return age;
}
public void setAdress(String adress){
this.adress=adress;
}
public String getAdress() {
return adress;
}
public void setStudy(String study){ this.study=study; }
public String getStudy() {
return study;
}
}
同时建立这个BmbTest 的映射文件BmbTest.xml(路径还是resources下):
<?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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="mybatis.dao.IBmbTest"就是mybatis.dao(包名)+IBmbTest(IBmbTest.java文件去除后缀)-->
<mapper namespace="mybatis.dao.IBmbTest">
<!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getBmbTest,id属性值必须是唯一的,不能够重复
使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
resultType="BmbTest"就表示将查询结果封装成一个BmbTest类的对象返回
BmbTest类就是bmbtest表所对应的实体类
-->
<!--
根据id查询得到一个bmbtest对象
-->
<select id="getBmbTest" parameterType="int"
resultType="BmbTest">
select * from bmbtest
where id = #{bmbTestId}
</select>
<insert id="insertBmbTest" parameterType="mybatis.model.BmbTest">
insert into bmbtest
values(#{id}, #{name}, #{sex}, #{age}, #{adress}, #{study})
</insert>
<select id="getBmbTestList" resultType="mybatis.model.BmbTest">
select * from bmbtest
</select>
<update id="updateBmbTest" parameterType="BmbTest">
update bmbtest
set name = #{name},
sex = #{sex},
age = #{age},
adress = #{adress},
study = #{study}
where id = #{id}
</update>
<delete id="deleteBmbTest" parameterType="int">
delete from bmbtest where id = #{id}
</delete>
</mapper>
下面对这几个配置文件解释下:
1.Configuration.xml 是 mybatis 用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如<typeAlias alias="BmbTest" type="mybatis.model.BmbTest" /> 这个别名非常重要,你在 具体的类的映射中,比如BmbTest.xml 中 resultType 就是对应这里的。
2. Configuration.xml 里面 的<mapper resource="BmbTest.xml" />是包含要映射的类的xml配置文件。
3. 在BmbTest.xml文件里面 主要是定义各种SQL 语句,以及这些语句的参数,以及要返回的类型等.
在mybatis.dao路径下创建接口类IBmbTest.java,内容如下:
package mybatis.dao;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import mybatis.model.BmbTest;
public interface IBmbTest {
//@Select("select * from bmbtest where id= #{id}")
//public BmbTest getBmbTestByID(int id);
public List<BmbTest> getBmbTestList();
public void insertBmbTest(BmbTest bmbTest);
public void updateBmbTest(BmbTest bmbTest);
public void deleteBmbTest(int bmbTestId);
public BmbTest getBmbTest(int id);
}
这里面有一个方法名 selectBmbTestByID 必须与 BmbTest.xml 里面配置的 select 的id 对应(<select id="selectBmbTestByID")
在mybatis.dao路径下创建Main.java,将在该文件下对数据库进行增删改查操作,内容如下:
package mybatis.dao;
import java.io.Reader;
import java.text.MessageFormat;
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 mybatis.model.BmbTest;
public class Main {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
// mybatis的配置文件
reader = Resources.getResourceAsReader("Configure.xml");
// 构建sqlSession的工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSession() {
return sqlSessionFactory;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub //创建能执行映射文件中sql的sqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
//sqlSessionFactory.getConfiguration().addMapper(IBmbTest.class);
//BmbTest bmbtest = (BmbTest) session.selectOne( "mybatis.model.BmbTestMapper.getBmbTestByID", 1);
// 数据列表
// getBmbTestList();
// 插入数据
// testInsert();
// 更新数据
// testUpdate();
// 删除数据
// testDelete();
} finally {
session.close();
}
}
// 插入数据
public static void testInsert()
{
try
{
// 获取Session连接
SqlSession session = sqlSessionFactory.openSession();
// 获取Mapper
IBmbTest bmbtestMapper = session.getMapper(IBmbTest.class);
System.out.println("Test insert start...");
// 执行插入
BmbTest bmbTest = new BmbTest();
bmbTest.setId(10);
bmbTest.setName("赵公明");
bmbTest.setSex("男");
bmbTest.setAge(1756);
bmbTest.setAdress("峨眉山罗浮洞");
bmbTest.setStudy("定海珠");
bmbtestMapper.insertBmbTest(bmbTest);
// 提交事务
session.commit();
// 显示插入之后BmbTest信息
System.out.println("After insert");
getBmbTestList();
System.out.println("Test insert finished...");
}
catch (Exception e)
{
e.printStackTrace();
}
}
// 获取数据列表
public static void getBmbTestList() {
try {
SqlSession session = sqlSessionFactory.openSession();
IBmbTest iBmbTest = session.getMapper(IBmbTest.class);
// 显示BmbTest信息
System.out.println("Test Get start...");
printBmbTests(iBmbTest.getBmbTestList());
System.out.println("Test Get finished...");
} catch (Exception e) {
e.printStackTrace();
}
}
// 更新数据
public static void testUpdate()
{
try
{
SqlSession session = sqlSessionFactory.openSession();
IBmbTest iBmbTest = session.getMapper(IBmbTest.class);
System.out.println("Test update start...");
printBmbTests(iBmbTest.getBmbTestList());
// 执行更新
BmbTest bmbTest = iBmbTest.getBmbTest(9);
bmbTest.setName("赵公明");
bmbTest.setSex("男");
bmbTest.setAge(1756);
bmbTest.setAdress("峨眉山罗浮洞");
bmbTest.setStudy("定海珠");
iBmbTest.updateBmbTest(bmbTest);
// 提交事务
session.commit();
// 显示更新之后User信息
System.out.println("After update");
printBmbTests(iBmbTest.getBmbTestList());
System.out.println("Test update finished...");
}catch (Exception e)
{
e.printStackTrace();
}
}
// 删除数据
public static void testDelete()
{
try
{
SqlSession session = sqlSessionFactory.openSession();
IBmbTest iBmbTest = session.getMapper(IBmbTest.class);
System.out.println("Test delete start...");
// 显示删除之前BmbTest信息
System.out.println("Before delete");
printBmbTests(iBmbTest.getBmbTestList());
// 执行删除
iBmbTest.deleteBmbTest(8);
// 提交事务
session.commit();
// 显示删除之后User信息
System.out.println("After delete");
printBmbTests(iBmbTest.getBmbTestList());
System.out.println("Test delete finished...");
}catch (Exception e)
{
e.printStackTrace();
}
}
/**
*
* 打印用户信息到控制台
*
* @param bmbTests
*/
private static void printBmbTests(final List<BmbTest> bmbTests) {
int count = 0;
for (BmbTest bmbTest : bmbTests) {
System.out.println(MessageFormat.format(
"============= BmbTest[{0}]=================", ++count));
System.out.println("BmbTest Id: " + bmbTest.getId());
System.out.println("BmbTest Name: " + bmbTest.getName());
System.out.println("BmbTest Dept: " + bmbTest.getSex());
System.out.println("BmbTest Website: " + bmbTest.getAge());
System.out.println("BmbTest Website: " + bmbTest.getAdress());
System.out.println("BmbTest Website: " + bmbTest.getStudy());
}
}
}
上面的文件中,把增( // testInsert();)删(// testDelete();)改(// testUpdate();)查(// getBmbTestList();)四种方法都写进去了,并在方法前面加了两个正斜杠(注释),在使用其中一个方法的时候,只要去掉前面的两个正斜杠就可以对数据库进行访问.
今天的收获
今天主要在学习mybatis的概念,对每个类和xml文件进行深入的理解,了解它们之间的关系.
遇到的问题
今天在补基础,没有遇到问题
明天的计划
明天开始Spring mybatis
任务进度:任务1步骤17
任务开始时间:10月28日
任务结束时间:11月10日
可能要延期到11月13号
评论