1. 什么是Mybatis
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
2.? 编写Mybatis的步骤
首先我们要写一个Mybatis的核心配置文件,我们一般叫Mybatis-config.xml,这个名字其实是可以随便起的,但是我们有一句话叫约定大于配置.
Mybatis.config.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>
<!--读取db.properties文件-->
<properties resource="db.properties" />
<!--给类起别名-->
<typeAliases>
<typeAlias type="Models.aaa" alias="aaa"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--每一个Mapper都要注册-->
<mappers>
<mapper resource="Mapper/DemoMapper.xml"/>
</mappers>
</configuration>
dp.properties里面写数据库的信息
第二步? 我们需要写一个Mybatis工具类
Utils.java
package 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;
public class Util {
public static SqlSessionFactory sqlSessionFactory;
static {
try {
//获取sqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取sqlSession对象,它完全包含了面向数据库执行SQL语句所需的所有方法
public static SqlSession getSqlSession() {
if(sqlSessionFactory==null){
System.out.println("这个是空的");
}
//自动提交
return sqlSessionFactory.openSession(true);
}
}
这里要特别注意sqlsessionFactory的作用域,我第一次就在这里遇到空指针异常
第三步? 创建实体类
这一步就很简单了,跟数据库中的字段对应上就可以了,具体的代码就不写了,我们一般叫这种模型起名叫POJO
第四步 写一个Mapper接口
写一个方法
package Mapper;
import Models.aaa;
import java.util.List;
public interface DemoMapper {
List<aaa> getInsert();
}
查询表里面的所有信息
第五步? 编写Mapper配置文件
DemoMapper.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">
<!--一个Mapper绑定一个接口-->
<mapper namespace="Mapper.DemoMapper">
<!--id里面写方法名,resultType指的是返回类型-->
<select id="getInsert" resultType="aaa">
select * from aaa
</select>
</mapper>
第六步? 执行方法
package Test01;
import Mapper.DemoMapper;
import Models.aaa;
import Utils.Util;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class Test {
public static void main(String[] args) {
SqlSession sqlSession = Util.getSqlSession();
DemoMapper mapper = sqlSession.getMapper(DemoMapper.class);
List<aaa> insert = mapper.getInsert();
for (aaa aaa : insert) {
System.out.println(aaa);
}
sqlSession.close();
}
}
增删改都是一样的,写一个方法,然后在Mapper.xml文件里面配置
删除:
Mapper.xml文件代码
<!--删除方法, parameterType是指传入类型-->
<delete id="getDelete" parameterType="int">
delete from aaa where id=#{id}
</delete>
执行代码
SqlSession sqlSession = Util.getSqlSession();
DemoMapper mapper = sqlSession.getMapper(DemoMapper.class);
int delete = mapper.getDelete(1014);
System.out.println("成功删除id为1014的学生信息");
sqlSession.close();
增加:
<!--新增一个学生-->
<insert id="getChange" parameterType="aaa">
insert into aaa (id,myname,sex,myaddress) values(#{id},#{myname},#{sex},#{myaddress})
</insert>
执行代码
SqlSession sqlSession = Util.getSqlSession();
DemoMapper mapper = sqlSession.getMapper(DemoMapper.class);
aaa aaa = new aaa(1015, "张三", "未知", "泰国");
mapper.getChange(aaa);
sqlSession.close();
万能Map,这个是我们最常用的
我们要查询一个学生信息,条件为id和姓名
<select id="getSet" parameterType="map" resultType="aaa">
select * from aaa where id=#{sid} and myname=#{name}
</select>
执行方法
qlSession sqlSession = Util.getSqlSession();
DemoMapper mapper = sqlSession.getMapper(DemoMapper.class);
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "李四");
map.put("sid", 1015);
List<aaa> set = mapper.getSet(map);
for (aaa aaa : set) {
System.out.println(aaa);
}
sqlSession.close();
未完待续
|