一、Mybatis介绍:
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。(简单的说:替代jdbc,使数据持久化)
二、Mybatis——jar包:
三、代码结构图及详解:
注:UserMapper.java为自定义接口
UserMapper.xml为自定义接口对应的映射文件(两个名字必须相同)
Test为测试类,WEB应用可以直接在Servlet中调用方法
User为实体类
UserService为封装的操作类,便于开发项目,调用方法
SqlFactory为工具类,读取mybatis配置文件
connection.xml为mybatis配置文件,主要写连接数据库的代码和引入映射文件的代码
四、代码展示:
4.1 SQL代码:
CREATE TABLE`users` (
`id`int(11) NOT NULLAUTO_INCREMENT,
`name`varchar(20) DEFAULT NULL,
`age`int(11) DEFAULT NULL,PRIMARY KEY(`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;INSERT INTO `users` VALUES ('1', '张三', '27');INSERT INTO `users` VALUES ('2', '李四', '27');
4.2 connection.xml代码:
4.3 SqlFactory代码:
packagecom.scme.utils;importjava.io.IOException;importjava.io.InputStream;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importcom.scme.dao.UserMapper;public classSqlFactory {private staticSqlSessionFactory sqlSessionFactory;static{//mybatis的配置文件的名字
String fileName="connection.xml";//使用输入流读取mybatis的配置文件(它也加载关联的映射文件)
InputStream inputStream;try{
inputStream=Resources.getResourceAsStream(fileName);
sqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}//返回sqlSessionFactory对象
public staticSqlSessionFactory getSqlSessionFactory() {returnsqlSessionFactory;
}
}
4.4 UserMapper.java代码:
packagecom.scme.dao;importjava.util.List;importcom.scme.pojo.User;public interfaceUserMapper {//根据id查询
public List queryById(intid);
}
4.5 UserMapper.xml代码:
select * from users where id=#{id}
4.6 UserService代码:
packagecom.scme.service;importjava.util.List;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importcom.scme.dao.UserMapper;importcom.scme.pojo.User;importcom.scme.utils.SqlFactory;public classUserService {//获取SqlSessionFactory对象
privateSqlSessionFactory sqlSessionFactory;publicUserService() {
sqlSessionFactory=SqlFactory.getSqlSessionFactory();
}//封装queryByID方法
public List queryByID(intid){//创建能执行映射文件中sql的sqlSession
SqlSession sqlSession =sqlSessionFactory.openSession();//获取定义查询方法的接口
UserMapper userDao=sqlSession.getMapper(UserMapper.class);//调用根据id查询方法//虽然在userMapping.xml里面,resultType="com.scme.pojo.User",即返回值类型为User对象,但这里可以用list泛型集合接收
List list=userDao.queryById(id);
sqlSession.close();returnlist;
}
}
4.7 User代码:
packagecom.scme.pojo;public classUser {//实体类的属性和表的字段名称一一对应
private intid;privateString name;private intage;public intgetId() {returnid;
}public void setId(intid) {this.id =id;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}public intgetAge() {returnage;
}public void setAge(intage) {this.age =age;
}publicString toString() {return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
4.8 Test代码:
packagecom.scme.lunch;importjava.util.List;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importcom.scme.pojo.User;importcom.scme.service.UserService;importcom.scme.utils.SqlFactory;public classTest {public static voidmain(String[] args) {
UserService service=newUserService();
List list=service.queryByID(1);
System.out.println(list.get(0));
}
}
五、效果展示:
如有帮助,请关注!