Mybatis是一个实现了java数据持久化的开源框架,简单的来说,他就是一个jdbc的封装组件Mybatis的前身是ibatis,ibatis创建于2002年,最初是apache下面的一个开源项目 2010迁移到gogole code ,并且更名为Mybatis;MyBatis是一个支持普通SQL查询(SQL语句),存储过程和高级映射的优秀持久层框架,是一个半ORM框架!
光说不练假把式(下面我们来理论联系实际写一个CRUD的小案例)
下面我们以java的maven项目为例用一个小demo形式体验一下mybatis
运行下面语句即可
CREATE TABLE `User` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO `User` VALUES (1, 'test', 18);
INSERT INTO `User` VALUES (2, '张三', 25);
org.mybatis
mybatis
3.3.0
mysql
mysql-connector-java
5.1.40
junit
junit
4.11
test
log4j
log4j
1.2.17
org.slf4j
slf4j-api
1.7.12
org.slf4j
slf4j-log4j12
1.7.12
注意: 导入依赖后需要对项目进行检查,是否已经成功导入maven的依赖
/**
* User 表实体类
*/
public class User {
private int id;
private String name;
private int age;
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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/testmybatis?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=admin
注意: 文件放在resources资源文件目录下,(没有自行创建)
简单解释:
在resources文件夹下创建mapper文件夹,个mapper文件夹下创建一个UserMapper.xml
INSERT INTO USER (NAME,AGE) VALUES(#{name},#{age})
UPDATE USER
NAME = #{name},
AGE = #{age},
WHERE ID = #{id}
DELETE FROM USER WHERE ID = #{id}
解析:
至此: 上面的namespace的作用暂时是标识
:select查询语句句柄
:insert插入语句句柄
:update修改语句句柄
:delete删除语句句柄
节点属性解释
1: id:表示一个sql句柄的唯一标示(相当于在jdbc的statement对象)
2: paremeterType :输入参数的类型 ,在sql语句中,通过占位符#{}来接收此参数
3:resultType: sql操作返回的结果类型
/**
* baseDao 用于 创建sqlSession
*/
public class BaseDao {
/**
* 返回sqlSession
*/
protected SqlSession getSqlSession(){
String configFile = "mybatis-config.xml";
Reader reader = null;
try {
reader = Resources.getResourceAsReader(configFile);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
} catch (IOException e) {
e.printStackTrace();
}finally {
if (reader!=null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
}
/**
* User 用戶dao
*/
public class UserDao extends BaseDao {
/**
* 查询打印所有用户列表
* @return
*/
public void getUsers(){
SqlSession sqlSession = getSqlSession();
List users = sqlSession.selectList("user.getUsers");
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
}
/**
* 根据用户id 查询打印用户信息
*/
public void getUserById(int id){
SqlSession sqlSession = getSqlSession();
List users = sqlSession.selectList("user.getUserById",id);
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
}
/**
* 根据用户名和年龄查询用户信息
* @param user
*/
public void getUserByNameAndAge(User user){
SqlSession sqlSession = getSqlSession();
List users = sqlSession.selectList("user.getUserByNameAndAge", user);
for (User user1 : users) {
System.out.println(user1);
}
sqlSession.close();
}
/**
* 添加用户
* @param user 添加的用户
*/
public void addUser(User user){
SqlSession sqlSession = getSqlSession();
int i = sqlSession.insert("user.addUser", user);
if (i!=0){
System.out.println("添加成功!");
}else{
System.out.println("添加失败!");
}
//提交事务
sqlSession.commit();
sqlSession.close();
}
/**
*根据用户id 修改用户信息
* @param user 修改的用户
*/
public void updateUser(User user){
SqlSession sqlSession = getSqlSession();
int i = sqlSession.update("user.updateUser", user);
if (i!=0){
System.out.println("修改成功!");
}else{
System.out.println("修改失败!");
}
sqlSession.commit();
sqlSession.close();
}
/**
* 根据用户id 删除用户记录
* @param id
*/
public void delUser(int id){
SqlSession sqlSession = getSqlSession();
int i = sqlSession.delete("user.delUser", id);
if (i!=0){
System.out.println("删除成功!");
}else{
System.out.println("删除失败!");
}
sqlSession.commit();
sqlSession.close();
}
}
注意: mybatis 进行增删改操作需要手动提交事务,进行commit操作!
在test目录创建UserDaoTest.java测试类
/**
* 测试UserDao
*/
public class UserDaoTest {
/**
* 测试查询所有用户列表
*/
@Test
public void testGetUsers(){
UserDao userDao = new UserDao();
userDao.getUsers();
}
/**
* 根据id 查询用户信息
*/
@Test
public void testGetUserById(){
UserDao userDao = new UserDao();
userDao.getUserById(1);
}
/**
* 根据id 查询用户信息
*/
@Test
public void testGetUserByNameAndAge(){
UserDao userDao = new UserDao();
User user = new User();
user.setAge(18);
user.setName("test");
userDao.getUserByNameAndAge(user);
}
/**
* 添加用户
*/
@Test
public void testAddUser(){
UserDao userDao = new UserDao();
User user = new User();
user.setAge(19);
user.setName("教胜哥哥");
userDao.addUser(user);
}
/**
* 修改用户
*/
@Test
public void testUpdateUser(){
UserDao userDao = new UserDao();
User user1 = new User();
user1.setId(3);
user1.setAge(20);
user1.setName("教胜哥哥11");
userDao.updateUser(user1);
}
/**
* 删除一个用户
*/
@Test
public void testDelUser(){
UserDao userDao = new UserDao();
userDao.delUser(4);
}
}