Mybatis配置及详细说明

1. Mybatis的介绍

1.1 什么是Mybatis?

    Mybatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

1.2 特点:     

 Mybatis是支持普通SQL查询,存储过程和高级映射的持久层框架。对JDBC的操作数据库过程进行封装,可使用简单的xml或注解用于配置和原始映射,将接口和Java的pojo映射成数据库中的记录。

2.Mybatis入门

2.1 mybatis的架构图

2.2 mybatis配置并实现对数据库的CRUD步骤 

前提:

mybatis下载  网址: https://github.com/mybatis/mybatis-3/releases

mybatis-3.2.7.jar mybatis的核心包

lib文件夹 mybatis的依赖包所在

mybatis-3.2.7.pdf mybatis使用手册

下载数据库驱动包:  mysql-connector-java-5.1.40-bin.jar    

加入mybatis核心包、依赖包、数据驱动包。

(1). config.xml文件:   src下面

作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

<?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="com/mapper/db.properties"></properties>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClassName}"/>
                <!--分别是数据库的jdbc:mysql://ip:port/数据库-->
                <property name="url" value="${jdbc.url}"/>
                <!--账号密码-->
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--  每一个mapper.xml都需要  -->
    <mappers>
        <mapper resource="com/mapper/mapper.xml"/>
    </mappers>
</configuration>

(2). db.properties:    com.mapper包

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:6603/ssm_test
jdbc.username=root
jdbc.password=123456
jdbc.maxActive = 100
jdbc.maxIdle =5
jdbc.minIdle=1
jdbc.initialSize =30
jdbc.maxWait =3000

mapper.xml:    com.mapper包

sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在config.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">
<!--- 命名空间 namespace -->
<mapper namespace="mapper">
    <select id="selectUserById" parameterType="int" resultType="com.entity.TestUser" >
       select * from mybatis where id=#{id};
    </select>
 
     <select id="selectAllUser" parameterType="int" resultType="com.entity.TestUser" >
        select * from mybatis;
    </select>

    <update id="updateAllUser" parameterType="com.entity.TestUser">
        update mybatis set username = #{username}, age = #{age};
    </update>

    <update id="updateUserById" parameterType="com.entity.TestUser">
        update mybatis set username = #{username},age = #{age} where id = #{id};
    </update>

    <insert id="insertUser" parameterType="com.entity.TestUser">
     insert into mybatis(id,username,age) values(#{id}, #{username}, #{age});
    </insert>

    <delete id="deleteUser" parameterType="com.entity.TestUser" >
        delete from mybatis where id = #{id};
    </delete>   
</mapper>

(3).配置实体类   TestUser

package com.entity;

public class TestUser {

    private int id;
    private String username;
    private int age;
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
    public TestUser(int id, String username, int age) {
        super();
        this.id = id;
        this.username = username;
        this.age = age;
    }
    
    public TestUser() {
        super();
        // TODO Auto-generated constructor stub
    }

}

(4).Test1.java

通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂;

   由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

package com.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

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 com.entity.TestUser;

public class Test1 {

    public static void main(String[] args) {        
        Test1 test1 = new Test1();
        test1.TestInsert();
    }

    public void TestInsert(){

        SqlSession sqlsession = Test1.getSqlSession();
        TestUser testUser = new TestUser();
        testUser.setId(2);
        testUser.setUsername("xiaoli");
        testUser.setAge(18);

        int result = sqlsession.insert("mapper.insertUser",testUser);
        System.out.println("新增:"+result);
    }
    
    public void TestSelect() {
        SqlSession sqlsession = Test1.getSqlSession();
        List<TestUser> list = sqlsession.selectList("mapper.selectUserById", 1);
        for (int i = 0; i < list.size(); i++) {
            System.out.println("用户名:"+list.get(i).getUsername());            
        }
    }
    
    public void TestDel() {    
        SqlSession sqlsession = Test1.getSqlSession();
        int del = sqlsession.delete("mapper.deleteUser", 1);
        System.out.println("删除:"+del);    
    }
    
    public void TestUpdate() {
        
        TestUser testUser = new TestUser();
        SqlSession sqlsession = Test1.getSqlSession();
        testUser.setId(1);
        testUser.setAge(28);
        testUser.setUsername("xiaohua");
        int upd = sqlsession.update("mapper.updateUserById",testUser);
        System.out.println("修改:"+upd);
    }
    
    public void TestUpdateAll() {
        
        TestUser testUser = new TestUser();
        SqlSession sqlsession = Test1.getSqlSession();
        testUser.setId(1);
        testUser.setAge(8);
        testUser.setUsername("xiaoxiao");
        int upd = sqlsession.update("mapper.updateAllUser",testUser);
        System.out.println("修改全部:"+upd);
    }
    
    public static SqlSession getSqlSession(){

        String resource = "config.xml";
        SqlSession session = null;
        try {
            InputStream iStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(iStream);
            session = factory.openSession(true);    //true:自动提交 ; false:手动提交
        } catch (IOException e) {
            e.printStackTrace();
        }
        return session;
    }

    
}

(4).TestServlet .java    用于和前端页面交互

package com.test;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    Test1 test1 = new Test1();
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        String flag = request.getParameter("flag").toString();
        flag = (String) CEncoding(flag);
        System.out.println("调用标志:"+flag);
        
        if(flag.equals("1")){
            getAllUser();
        }else if(flag.equals("2")){
            String bianhao = request.getParameter("number").toString();
            Integer number = Integer.parseInt((String) CEncoding(bianhao));
            getUserById(number);
        }else if(flag.equals("3")){
            String bianhao = request.getParameter("number").toString();
            Integer number = Integer.parseInt((String) CEncoding(bianhao));
            
            String name = request.getParameter("name").toString();
            name = (String) CEncoding(name);
            String hobby = request.getParameter("hobby").toString();
            hobby = (String) CEncoding(hobby);
            
            Insert(number,name,hobby);
        }else if(flag.equals("4")){
            String bianhao = request.getParameter("number").toString();
            Integer number = Integer.parseInt((String) CEncoding(bianhao));
            
            String name = request.getParameter("name").toString();
            name = (String) CEncoding(name);
            String hobby = request.getParameter("hobby").toString();
            hobby = (String) CEncoding(hobby);

            Update(number,name,hobby);
        }else if(flag.equals("5")){
            String bianhao = request.getParameter("number").toString();
            Integer number = Integer.parseInt((String) CEncoding(bianhao));
            
            delete(number);
        }
    }

    //查询全部数据
    public void getAllUser(){
        List<Object> list = test1.SelectAllUser();
        System.out.println("list:"+list);
    }
    //查询单个数据
    public void getUserById(int flag){
        List<Object> list = test1.SelectUserById(flag);
        System.out.println("list:"+list);
    }
    //插入数据
    public void Insert(int number,String param1,String param2){
        Integer result = test1.TestInsert(number, param1, param2);    
        System.out.println(result);
    }
    
    //修改数据
    public void Update(int number,String param1,String param2){
        Integer result = test1.TestUpdate(number, param1, param2);
        System.out.println(result);
    }
    
    //删除数据
    public void delete(int number){
        Integer result = test1.TestDelete(number);
        System.out.println(result);
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
    
    //UTF-8编码
    public Object CEncoding(String param){
        
        try {
            param = new String(param.getBytes("ISO8859-1"),"UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return param;
    }
    
    public TestServlet() {
        super();
    }

}

JSP:Test.jsp

    <form action="TestServlet">
        <input type="text" name="flag" value="" placeholder="请输入标志">
        <input type="text" name="number" value="" placeholder="请输入编号">
        <input type="text" name="name" value="" placeholder="请输入姓名">
        <input type="text" name="hobby" value="" placeholder="请输入喜好">
        <input type="submit" value="提交2">
    </form>

(6).小结:

6.1 测试程序步骤:

 a. 创建SqlSessionFactoryBuilder对象

 b. 加载SqlMapConfig.xml配置文件

 c. 创建SqlSessionFactory对象

 d. 创建SqlSession对象

 e. 执行SqlSession对象执行查询,获取结果User

 f. 打印结果

 g. 释放资源

 

6.2  #{}和${}区别:
#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。
6.3 parameterType和resultType:
parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。
resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List中
6.4 selectOne和selectList:
selectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常:
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:70)

selectList可以查询一条或多条记录。

 

  
  
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值