使用mybatis自然也是需要一套流程,比如使用spring的话你会考虑用xml配置还是注解什么的,mybatis也是如此,我们暂且是先用xml。
这个过程也是比较简单的,先导入mybatis和mysql的依赖,随后编写mybatis-config.xml(说好了先试试xml的),如下
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useSSL=true&useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/li/dao/UserMapper.xml"/>
</mappers>
</configuration>
这个标签基本是固定的没啥解释的,唯一需要注意的,一开头就提醒(虽然纠结是应该先不写后面加上还是什么的,但懒得我还是先写出来提醒),需要注意的就是那个mappers标签,我们一般开发时都是dao,写的接口都是userDao之类的,这里我们换成了Mapper,就换了名字而已,你想写dao也无所谓,但感觉跟着建议走比较好。不知道大家记不记得在Javaweb中有一个servlet,就是专门负责接受前台信息调用service的方法再将结果返回前台的那个层(不要拿ajax来吐槽!),大家每写一个servlet基本都要在web.xml中注册一下吧,这个mappers标签也是一样,在这个标签中注册我们的各个mapper.xml,你问我这个xml是啥?刚刚不是说了我们用xml来进行mybatis的开发嘛,这就是那个xml,每个接口对应一个xml,上代码。
例行pojo
public class User {
private int id;
private String name;
private String pwd;
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + 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;
}
}
public interface UserMapper {
List<User> getAllUser();
User getUserById(int id);
int addUser(User user);
int updateUser(User user);
int deleteUser(int id);
}
<?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就是dao的意思,我们需要的是再这个dao中建立接口,这个namespace就是用来和接口连接的东西-->
<mapper namespace="com.li.dao.UserMapper">
<!--这个id就是你接口中的方法名-->
<!--这个resulttype就是说返回的类型-->
<select id="getAllUser" resultType="com.li.pojo.User">
select * from USER ;
</select>
<!--parameterType指的是方法中参数的类型-->
<select id="getUserById" resultType="com.li.pojo.User" parameterType="int">
select * from USER where id=#{id};
</select>
<insert id="addUser" parameterType="com.li.pojo.User">
insert into user(id,name, pwd) VALUES(#{id},#{name},#{pwd});
</insert>
<update id="updateUser" parameterType="com.li.pojo.User">
update user set name=#{name},pwd=#{pwd} where id=#{id};
</update>
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id};
</delete>
</mapper>
这个xml就没啥解释的了,大家作为老程序员都懂,这都是最基本的。
随后查考mybatis的文档发现,我们在jdbc中运行sql时都是用preparestatement,这里用的是sqlSession,你可以理解为这个sqlSession就是那个预编译的替代品,那也就是说我们必须要获得sqlSession这个东西,我们可以编写一个获取sqlSession的工具类(记得导入我们那个配置的mybatis-config.xml文件,这是核心文件)。
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
String resource= "mybatis-config.xml";
try {
InputStream stream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
其实写到这就可以运行了,但还有一个要点,就是事务!!!
写查询方法还无所谓,当进行增删改的时候一定要记得提交事务,不然数据库中啥都没变,但也不报错。
@Test
public void t1(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.addUser(new User(4, "地方撒", "1235"));
if (i>0){
System.out.println("999");
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void t2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser(new User(4,"哈哈","001"));
//再次提醒增删改要提交
sqlSession.commit();
sqlSession.close();
}
@Test
public void t3(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUser(4);
sqlSession.commit();
sqlSession.close();
}