Mybatis是一个基于java的持久型框架,有了Mybatis,终于可以不用写jdbc代码这种东西了,写个搭建Mybatis框架过程,就当做个笔记吧。
(一)新建一个web项目,起好项目名之后一路next,finish。下面是项目建好后的工程目录(图中用的Eclipse工具,项目名FirstMybatis)
(二)加入Mybatis框架需要的jar包,我这里添加了4个,分别是:
jstl-1.2.jar //jstl标准标签库,后面使用jsp页面来显示数据
log4j-1.2.17.jar //日志包
mybatis-3.2.0.jar //Mybatis的jar包,必须加入上面log4j-1.2.17.jar这个jar包,否则会报错,Mybatis更高的版本可能不用
mysql-connector-5.1.8.jar //mysql驱动包,要连接mysql数据库必须加入
把上面的jar包放WebContent/WEB-INF/lib下添加依赖
为了便于管理,我在src下新建了5个包,包名可以自己定义
这里的Controller包用来存放控制器类,Service包用来处理业务,Pojo包存放实体类,Mapper包作为数据访问层,Utils包作为工具包
在src目录下再新建一个mybatis-config.xml文件,用来配置Mybatis的各种配置
下面贴图
(三)下面就是mybatis的各种配置了
打开mybatis-config.xml
配置文件内容如下
配置文件中的连接地址、用户名、密码改成自己的
其中的
配置文件已经完成了,对于上面的配置,还可以用另一种方式配置
如果觉得麻烦的话可以忽略下面内容,直接跳到(四)
在src目录下建个后缀为properties的文件,比如我新建一个db.properties
db.properties文件中写你的配置参数
比如我的数据库配置参数
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/hibernatedb
username=root
password=123456
然后在mybatis-config.xml文件的
申明db.properties文件作为全局配置
配置完成后我们就可以用${driver}(表示db.properties中driver对应的值)来配置数据库了
例如可以将上面的数据库配置写成下面这样
这样,在数据库配置参数有所变动时,也可以直接在db.properties中修改
(四)然后再来写个工具类,用来获取SqlSession的连接工厂
在Utils包下新建一个SqlSessionFactoryUtils.class,名字自定义
代码如下
public class SqlSessionFactoryUtils {
//定义一个变量保存mybatis框架的连接工厂
private static SqlSessionFactory sqlSessionFactory;
//初始化连接工厂
//静态代码块,与类一起加载,访问类的时候与类一起加载
//读取配置文件来做Mybatis连接工厂
static {
try {
String resource = "mybatis-config.xml";
//读取配置文件,自动到src类路径下寻找配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//将inputStream转换成Mybatis的连接工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//定义一个获取连接的方法
public static SqlSession getSqlSession()
{
return sqlSessionFactory.openSession();
}
//释放连接,关闭资源
public static void close(SqlSession sqlSession)
{
if(sqlSession!=null)sqlSession.close();
}
}
(五)...一大堆配置完成了,后面是具体的使用
首先在Pojo中新建一个User类,保存用户信息,这里示范的数据库名为test,有一张user表,id,name,address三个字段
User类用来存放从user表中取出来的数据,字段必须对应
public class User {
int id;
String name;
String password;
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
在Mapper包下面新建一个接口类UserMapper.java(必须在Mapper包下,之前配置文件中配置扫描此包,不写在这里是找不到这个文件的)
在接口类中写一个用来查询数据的方法
为这个方法加上注解(@Select注解:执行查询操作,写入查询的sql语句)
public interface UserMapper {
@Select("select * from user")
public List findAll();
}
(六)在Service包下新建一个UserService.java作为用户的业务处理类
public class UserService {
public List findAll()
{
//从sqlSession工具类中获取SqlSession
SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
//从sqlSession中获取映射文件
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用userMapper中的findAll方法,执行查询语句,并返回一个List数据
return userMapper.findAll();
}
}
终于到最后一部分了...
接下来要新建一个控制器,再调用UserService业务类中的finAll方法,拿到数据,再绑到jsp页面中显示
先到Controller包下建一个servlet控制器,比如我这里叫UserController.java
在Get方法中调用UserService中的findAll方法,获得返回的数据,跳转到jsp页面展示数据
@WebServlet("/UserController")
public class UserController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UserController() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
UserService userService = new UserService();
//获取返回的数据
request.setAttribute("users", userService.findAll());
//跳转页面显示
request.getRequestDispatcher("/WEB-INF/jsp/user.jsp").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
在WEB-INF目录下新建个jsp文件夹,在其中建立个user.jsp文件
把请求的数据绑定到jsp页面上
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Insert title here
${user.id}
${user.name}
${user.address}
(七)最后,启动服务器,在浏览器中输入http://localhost:8080/FirstMyBatis/UserController(写你自己的项目名和地址)
数据表中添加几条数据用于测试,页面正常显示,搭建成功
对于UserMapper类中的增删改查,与注解@Select同理,改成@Insert、@Update、@Delete即可。
UserMapper类中的数据操作除了可以用注解方式实现外,还可以通过xml文件来实现,有空再补充上去。。。
最后,贴一张完整的项目路径图