1,简单介绍一下mybatis框架,Mybatis是Apache的一个开源项目——iBatis,2010年这个项目迁移到Google Code,并改名为MyBatis.
MyBatis是一个基于java的持久层框架。MyBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO),它消除了几乎所有的JDBC代码和参数的手工设置,以及结果的检索。MyBatis使用简单的XML或注解用于配置和原始的映射,将接口和java的POJOs映射成数据库中的记录。
目前,java的持久层框架产品有许多,常见的有hibernate和mybatis.mybatis是一个半自动映射的框架,因为Mybatis需要手动匹配POJO、SQL和映射关系,而和hibernate是一个全表映射的框架,只需提供pojo和映射关系即可。没有mybatis是一个小巧、方便、高效、简单、直接、半自动化的持久层框架 ,hibernate是一个强大、方便、高效、复杂、间接、全自动化的持久层框架。两个框架各有特点,需要根据情况选择合适的框架。
框架配置:建立一个普通的工程即可,然后建立一个lib文件夹
(1)导包:导入一下的jar包
(2)编写一个普通的POLO类与数据库对应 。
package cn.zhong.mybatis.user;
public class User {
private int id;
private String loginName;
private String loginPwd;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getLoginPwd() {
return loginPwd;
}
public void setLoginPwd(String loginPwd) {
this.loginPwd = loginPwd;
}
@Override
public String toString() {
return "User [id=" + id + ", loginName=" + loginName + ", loginPwd=" + loginPwd + "]";
}
}
(3)使用mybatis 框架,每一个对象都需要一个对应的mapper配置文件与之对应。
insert into User(loginName,loginPwd) values(#{loginName},#{loginPwd})
update User set loginName = #{loginName},loginPwd=#{loginPwd} where id = #{id}
delete from User where id = #{id}
(4)编写一个主配置文件,里面包函数据库连接的信息,和把上面的映射文件放到配置文件中去。
(5)上面的配置完毕,应该就是测试了,测试的步骤和hibernate差不多,比较简单。
//select * from User 查询表的所有;
@Test
public void fun2() throws IOException{
//加载文件
InputStream config= Resources.getResourceAsStream("sqlMapConfig.xml");
// 用文件构建 SqlSessionFactory
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config);
//用工厂建立,Session
SqlSession ss = ssf.openSession();
List list = ss.selectList("cn.zhong.mybatis.user.UserMapper.selectAllUser");
System.out.println("********************************");
for (User user : list) {
System.out.println(user);
}
}
//单个查询,和插入一条数据,放在一起了
@Test
public void fun1() throws IOException{
//加载文件
InputStream config= Resources.getResourceAsStream("sqlMapConfig.xml");
// 用文件构建 SqlSessionFactory
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config);
//用工厂建立,Session
SqlSession ss = ssf.openSession();
User mu = ss.selectOne("cn.zhong.mybatis.user.UserMapper.selectUserById", 1);
System.out.println(mu);
User addmu = new User();
addmu.setLoginName("Jeck");
addmu.setLoginPwd("456");
// 插入一组数据
ss.insert("cn.zhong.mybatis.user.UserMapper.adduser", addmu);
ss.commit();
ss.close();
}
//更新数据
@Test
public void fun3() throws IOException{
//加载文件
InputStream config= Resources.getResourceAsStream("sqlMapConfig.xml");
// 用文件构建 SqlSessionFactory
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config);
//用工厂建立,Session
SqlSession ss = ssf.openSession();
User updateUser = new User();
updateUser.setId(8);
updateUser.setLoginName("张兰");
updateUser.setLoginPwd("789");
System.out.println(updateUser);
ss.update("cn.zhong.mybatis.user.UserMapper.updataId",updateUser);
System.out.println(updateUser);
ss.commit();
ss.close();
}
//删除数据
@Test
public void fun4() throws IOException{
//加载文件
InputStream config= Resources.getResourceAsStream("sqlMapConfig.xml");
// 用文件构建 SqlSessionFactory
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config);
//用工厂建立,Session
SqlSession ss = ssf.openSession();
User deleteUser = new User();
deleteUser.setId(8);
ss.delete("cn.zhong.mybatis.user.UserMapper.deleteUser",deleteUser);
ss.commit();
ss.close();
}
总结:测试的时候我没有把所有的增删改查放到一个方法中,所有整体看起来代码比较多,重复的比较多,个人喜欢分类,宁愿复杂一点。这个配置比较简单,没啥说的。
源码