简单的crud
从 XML 中构建 SqlSessionFactory
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的
SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得
从 SqlSessionFactory 中获取 SqlSession
从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。
mybatis 官网:入门_MyBatis中文网
String resource = "org/mybatis/example/mybatis-config.xml";
//第一步 :读取配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//第二步:构造工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
也就是说 SqlSession-->SqlSessionFactory-->SqlSessionFactoryBuilder
编写工具类:
package com.kuang.utils;
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 java.io.IOException;
import java.io.InputStream;
//SqlSessionFactory 来构建SqlSession
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//使用mybatis第一步:获取sqlSessionFactory对象
String resource = "mybatis-confg.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
//SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL
public static SqlSession getSqlSession(){
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
}
编写代码
实体类
package com.kuang.pojo;
//实体类
public class User {
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
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 String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
Dao层
package com.kuang.dao;
import com.kuang.pojo.User;
import java.util.List;
public interface UserDao {
//查询数据
List<User> getUserList();
//根据id查用户
User getById(int id);
//增加一条数据
int addUser(User user);
//修改一条数据
public void deleteUserById(int id);
//更新一条数据
public void updateUserById(User user);
}
接口实现类(在mybatis 中用-xml配置文件代替)
配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致
UserMapper.xml
<?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">
<!--namespace绑定一个Dao/mapper接口-->
<mapper namespace="com.kuang.dao.UserDao">
<!--select 查询语句-->
<select id="getUserList" resultType="com.kuang.pojo.User">
select * from mybatis.user
</select>
<!--select 根据id查询语句-->
<select id="getById" parameterType="int" resultType="com.kuang.pojo.User">
select * from mybatis.user where id= #{id}
</select>
<!--插入 语句-->
<insert id="addUser" parameterType="com.kuang.pojo.User">
insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd})
</insert>
<!--更新 根据id查询语句-->
<update id="updateUserById" parameterType="com.kuang.pojo.User">
update mybatis.user set name=#{name},pwd=#{pwd} where id = #{id}
</update>
</mapper>
编写测试类
package com.kuang.dao;
import com.kuang.pojo.User;
import com.kuang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserDaoTest {
@Test
public void test() {
//第一步 获得sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//执行sql 方法一 getmapper
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
//关闭sqlSession
sqlSession.close();
}
@Test
public void getIdTest() {
//第一步 获得sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//执行sql 方法一 getmapper
UserDao mapper = sqlSession.getMapper(UserDao.class);
User user = mapper.getById(8);
System.out.println(user);
//关闭sqlSession
sqlSession.close();
}
@Test
public void addUserTest1() {
//第一步 获得sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//执行sql 方法一 getmapper
UserDao mapper = sqlSession.getMapper(UserDao.class);
User user1 = new User(14,"黑子","666");
mapper.addUser(user1);
sqlSession.commit();
//关闭sqlSession
sqlSession.close();
}
@Test
public void deleteUserByIdTest() {
//第一步 获得sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//执行sql 方法一 getmapper
UserDao mapper = sqlSession.getMapper(UserDao.class);
mapper.deleteUserById(8);
sqlSession.commit();
//关闭sqlSession
sqlSession.close();
}
@Test
public void updaUserByIdTest() {
//第一步 获得sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//执行sql 方法一 getmapper
UserDao mapper = sqlSession.getMapper(UserDao.class);
User user1 = new User(13,"黑子白子","666");
mapper.updateUserById(user1);
sqlSession.commit();
//关闭sqlSession
sqlSession.close();
}
}
模糊查询like语句
第1种:在Java代码中添加sql通配符。
string wildcardname = “%smi%”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like #{value}
</select>
第2种:在sql语句中拼接通配符,会引起sql注入
string wildcardname = “smi”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like "%"#{value}"%"
</select>
总结:
所有的增删改操作都需要提交事务!
接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!
有时候根据业务的需求,可以考虑使用map传递参数!
为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!