前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyBatis入门

MyBatis入门

作者头像
一觉睡到小时候
发布2019-07-04 17:32:02
3710
发布2019-07-04 17:32:02
举报
文章被收录于专栏:国产程序员

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目录下新建:

的配置文件:

代码语言:javascript
复制
<?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>

接下来配置:

内容如下:

代码语言:javascript
复制
<!-- 引入配置文件 -->
<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的核心配置文件

内容如下:

代码语言:javascript
复制
<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为例):

代码语言:javascript
复制
jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/mysql
jdbc_username=root
jdbc_password=root

3.代码实现
①新建一个User的实体类,如下
代码语言:javascript
复制
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 + '\'' +
                '}';
    }
}

代码语言:javascript
复制
代码语言:javascript
复制
②创建登陆的LoginController
代码语言:javascript
复制
代码:
代码语言:javascript
复制
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";
    }
}

代码语言:javascript
复制
代码语言:javascript
复制
③创建Service及其实现类:
代码语言:javascript
复制
package com.study.service;


import com.study.domain.User;

/**
 * Created by LiDa on 2017/8/29.
 */
public interface UserService {
   User queryUsers(String username);
}

实现类:
代码语言:javascript
复制
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;
}
}

代码语言:javascript
复制
④编写dao
代码语言:javascript
复制
代码实现:
代码语言:javascript
复制
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);
}

代码语言:javascript
复制
代码语言:javascript
复制
⑤最后是xml的编写

代码:

代码语言:javascript
复制
<?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>
代码语言:javascript
复制

代码语言:javascript
复制
到这这样关于mybatis的代码实现完成了,欢迎批评指点。
代码语言:javascript
复制
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 国产程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档