MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache softwarefoundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
一、什么是MyBatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old JavaObjects,普通的 Java对象)映射成数据库中的记录。
二、MyBatis的功能架构
我们把Mybatis的功能架构分为三层:
1. API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
2. 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
3. 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
三、MyBatis的安装
官网:http://www.mybatis.org/mybatis-3/
要使用 MyBatis,只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。
如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:
我用的是3.2.4这个版本,可根据自己的需求选择相应的版本。
四、简单的实现
1.使用idea构建一个maven项目
这样一个maven的项目就构建完成,下面来进行一些xml文件的配置
2.xml配置文件
如下目录结构
在config目录下新建:
的配置文件:
<?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>
<properties resource="config/jdbc.properties">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
</properties>
<!-- 将类model类重命名 mapper调用方便 -->
<typeAliases>
<package name="com.study.domain.*"/>
</typeAliases>
</configuration>
接下来配置:
内容如下:
<!-- 引入配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:config/jdbc.properties</value>
</list>
</property>
</bean>
<!-- 自动扫描包 ,将带有注解的类 纳入spring容器管理 -->
<context:component-scan base-package="com.study"></context:component-scan>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${jdbc_driverClassName}</value>
</property>
<property name="username">
<value>${jdbc_username}</value>
</property>
<property name="password">
<value>${jdbc_password}</value>
</property>
<property name="url">
<value>${jdbc_url}</value>
</property>
</bean>
<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mapping.xml文件,**表示迭代查找 -->
<property name="mapperLocations" value="classpath:mapper/*.xml" />
</bean>
<!-- DAO接口所在包名,Spring会自动查找其下的类 ,包下的类需要使用@MapperScan注解,否则容器注入会失败 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.study.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
接下来是SpringMVC的核心配置文件
内容如下:
<mvc:annotation-driven />
<!-- 扫描controller(controller层注入) -->
<context:component-scan base-package="com.study.controller" ></context:component-scan>
<!-- HandlerMapping -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<!-- HandlerAdapter -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<!-- ViewResolver -->
<!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "prefix" value="/WEB-INF/views/"></property>
<property name = "suffix" value = ".jsp"></property>
</bean>
完了最后是数据库的配置文件(以mysql为例):
jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/mysql
jdbc_username=root
jdbc_password=root
3.代码实现
①新建一个User的实体类,如下
package com.study.domain;
/**
* Created by LiDa on 2017/8/29.
*/
public class User {
private String name;
private String password;
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;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
②创建登陆的LoginController
代码:
package com.study.controller;
import com.study.core.util.SessionKeys;
import com.study.domain.User;
import com.study.service.UserService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
* Created by LiDa on 2017/8/24.
*/
@Controller
public class LoginController {
private Log log = LogFactory.getLog(LoginController.class);
@Autowired
private UserService userService;
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login() {
return "login";
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(Model model, HttpServletRequest request) {
String username = request.getParameter("username");
String password = request.getParameter("password");
HttpSession session = request.getSession();
if (username == null || password == null) {
return "login";
}
User user=userService.queryUsers(username);
if(!password.equals(user.getPassword())){
return "login";
}
return "home";
}
}
③创建Service及其实现类:
package com.study.service;
import com.study.domain.User;
/**
* Created by LiDa on 2017/8/29.
*/
public interface UserService {
User queryUsers(String username);
}
实现类:
package com.study.service.Impl;
import com.study.dao.UserMapper;
import com.study.domain.User;
import com.study.service.UserService;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* Created by LiDa on 2017/8/29.
*/
@Service("UserService")
public class UserServiceImpl implements UserService {
@Resource(name="UserMapper")
private UserMapper userMapper;
public User queryUsers(String username) {
User user=null;
List<User> list=userMapper.queryUsers(username);
if(list!=null&&list.size()!=0){
user=list.get(0);
}
return user;
}
}
④编写dao
代码实现:
package com.study.dao;
import com.study.domain.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* Created by LiDa on 2017/8/29.
*/
@Repository("UserMapper")
public interface UserMapper {
List<User> queryUsers(@Param(value = "username") String username);
}
⑤最后是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 namespace="com.study.dao.UserMapper" >
<resultMap id="BaseResultMap" type="com.study.dao.UserMapper" >
<id column="ID" property="id" jdbcType="DECIMAL" />
<result column="name" property="username" jdbcType="VARCHAR" />
<result column="password" property="password" jdbcType="VARCHAR" />
</resultMap>
<select id="queryUsers" parameterType="java.lang.String" resultType="com.study.domain.User">
SELECT * FROM users;
</select>
</mapper>
到这这样关于mybatis的代码实现完成了,欢迎批评指点。