Spring结合Mybatis
本文以查找数据库中一张表的信息为例
1.添加jar包,包括mybits+数据库连接+gson(为了将获的数据通过json传到页面)。
2.创建实体类(与要查询的表相对应)。
public class Dept {
private Integer id;
private String dname;
private String dnumber;
private String dloc;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getDnumber() {
return dnumber;
}
public void setDnumber(String dnumber) {
this.dnumber = dnumber;
}
public String getDloc() {
return dloc;
}
public void setDloc(String dloc) {
this.dloc = dloc;
}
}
3.dao层,创建一个dao接口和它对应的映射文件
dao接口,接口中包含一个返回值为list的查询方法,list的泛型是刚刚创建的实体类型。
import java.util.List;
import com.spring.entity.Dept;
public interface DeptMapper {
List<Dept> findDept();
}
映射文件一般与接口的名称一样,namespace的值是dao接口的全名。注意要保证映射文件中操作的表在数据库中存在。
<?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 namespace="com.spring.dao.DeptMapper">
<select id="findDept" resultMap="deptMapper">
select * from dept
</select>
<resultMap type="com.spring.entity.Dept" id="deptMapper">
<id property="id" column="id" />
<result property="dname" column="dname" />
<result property="dnumber" column="dnumber" />
<result property="dloc" column="dloc" />
</resultMap>
</mapper>
4.配置mybits的连接文件,本文用的是Mysql,要保证数据库存在,同时引入映射文件
<?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="dev">
<environment id="dev">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="username" value="root" />
<property name="password" value="root" />
<property name="url" value="jdbc:mysql://localhost/mydatabase" />
<property name="driver" value="com.mysql.jdbc.Driver" />
</dataSource>
</environment>
</environments>
//dao层映射文件的添加
<mappers>
<mapper resource="com/spring/dao/DeptMapper.xml" />
</mappers>
</configuration>
5.书写MyBatis的工具类
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybitsUntil {
private static SqlSessionFactory factory = null;
static {
try {
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession() {
return factory.openSession();
}
public static void close(SqlSession session) {
if (session != null) {
session.close();
}
}
}
6.service层,创建一个类
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.spring.dao.DeptMapper;
import com.spring.entity.Dept;
import com.spring.until.MybitsUntil;
public class DeptService {
//查询表中所有数据
public static List<Dept> findDept(){
SqlSession sqlSession=MybitsUntil.getSqlSession();
DeptMapper deptMapper=sqlSession.getMapper(DeptMapper.class);
List<Dept> list=null;
try {
list=deptMapper.findDept();
if(list!=null){
return list;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
MybitsUntil.close(sqlSession);
}
return list;
}
}
7.控制器中添加新的方法,为了将字符串输出到页面中,方法需传入httpServletResponse类型的参数。
@RequestMapping("selectDept")
public void selectDept(HttpServletResponse response) throws IOException{
response.setCharacterEncoding("utf-8");
List<Dept> list=DeptService.findDept();
PrintWriter out=response.getWriter();
//将获得的类型以json格式传递到页面
out.print(new Gson().toJson(list));
out.flush();
out.close();
}
8.在页面中添加一个a标签,连到控制器的selectDept方法
<a href="<%=request.getContextPath()%>/oneController/selectDept.action">测试数据</a>