zoukankan      html  css  js  c++  java
  • Mybatis 框架搭建实例

    前言

    MyBatis是一个优秀的持久层框架。原生的jdbc操作存在大量的重复性代码(如注册驱动,创建连接,创建statement,结果集检测等)。框架的作用就是把这些繁琐的代码封装。

    MyBatis通过XML或者注解的方式将要执行的sql语句配置起来,并通过java对象和sql语句映射成最终执行的sql语句。最终由MyBatis框架执行sql,并将结果映射成java对象并返回。

    正文

    准备jar包

    • mybatis-3.4.6.jar
    • mysql-connector-java-5.1.47.jar 

     mysql数据库为firstdb,表名为xtb,表结构如下

    1.新建java project MybatisPro ,项目结构图:

    一共五个文件

     

    在src下新建com.domain包,在新建User.java

    package com.domain;
    
    public class User {
    	private Integer user_id;
    	private String user_name;
    	private String user_sex;
    	private String user_phone;
    
    	public String toString() {
    		return "User [user_id=" + user_id + ", user_name=" + user_name + ", user_sex=" + user_sex + ", user_phone="
    				+ user_phone + "]";
    	}
    
    	public String getUser_phone() {
    		return user_phone;
    	}
    
    	public void setUser_phone(String user_phone) {
    		this.user_phone = user_phone;
    	}
    
    	public String getUser_sex() {
    		return user_sex;
    	}
    
    	public void setUser_sex(String user_sex) {
    		this.user_sex = user_sex;
    	}
    
    	public String getUser_name() {
    		return user_name;
    	}
    
    	public void setUser_name(String user_name) {
    		this.user_name = user_name;
    	}
    
    	public Integer getUser_id() {
    		return user_id;
    	}
    
    	public void setUser_id(Integer user_id) {
    		this.user_id = user_id;
    	}
    }

     

    在src下新建com.Dao包,然后新建Interface文件,UserMapper.java

    package com.Dao;
    
    import com.domain.*;
    
    public interface UserMapper {
    	public User findUserById(int id) throws Exception;
    
    	public void insertUser(User user) throws Exception;
    }
    

    在src下新建全局配置文件SqlMapConfig.xml

    <?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="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/firstdb"/><!--用自己的数据库名字  -->
                    <property name="username" value="root"/>   <!-- 用自己的用户名密码 -->
                    <property name="password" value=""/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="UserMapper.xml"/> <!-- 这里配置映射文件 -->
        </mappers>
    </configuration>

    新建映射配置文件UserMpper.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属性,不然会报错,可看做包名-->
    <mapper namespace="com.Dao.UserMapper">
          <select id="findUserById" parameterType="int" resultType="com.domain.User">
            select * from xtb where user_id = #{id}
        </select>
        <insert id="insertUser" parameterType="com.domain.User">
            insert into xtb(user_name,user_sex,user_phone) values(#{user_name},#{user_sex},#{user_phone})
        </insert>   
    </mapper>

    最后,新建测试类Test.java

    package com.test;
    
    import java.io.InputStream;
    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.Dao.UserMapper;
    import com.domain.User;
    
    public class Test{
    	public static void main(String[] args) throws Exception {
    		testInsertUser();
    		SelectByid();
    		
    	}
    	
    	public static void SelectByid() throws Exception{
    		 String resource = "SqlMapConfig.xml";
    	        InputStream inputStream = Resources.getResourceAsStream(resource);
    	        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
    	        SqlSession session = factory.openSession();
    	        //---------------
    	        UserMapper userMapper = session.getMapper(UserMapper.class);
    	        User user = userMapper.findUserById(2);
    	        System.out.println(user);
    	        //--------------
    	        session.close();
    		
    	}
    	
    	  public static void testInsertUser() throws Exception{
    	        String resource = "SqlMapConfig.xml";
    	        InputStream inputStream = Resources.getResourceAsStream(resource);
    	        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
    	        SqlSession session = factory.openSession();
    	        //---------------------
    	        User user = new User();
    	        user.setUser_name("lalala");
    	        user.setUser_sex("women");
    	        user.setUser_phone("0123345");
    
    	        UserMapper mapper = session.getMapper(UserMapper.class);
    	        mapper.insertUser(user);
    	        session.commit();
    	        //----------------------
    	        session.close();
    	    }
    }

    运行程序,查看结果:

    常见错误解决:

    基本上都是UserMapper.xml和接口UserMap.java的对应关系没有配置好,我把UserMapper.xml和UserMap.java拼在一起可以看下自己的配置是否正确:

    简单来说就是:接口的包名,类名,参数,返回值分别对应着映射文件的namespace,id,parameterType,resultType。

    总结原理:

    mybais运用了代理技术,实例化出接口UserMapper的实例,然后通过根据配置文件调用sql.

    具体流程:

    1.读取配置文件SqlMapConfig.xml   获取连数据库的相关信息

    2.有了这些信息就能创建SqlSessionFactory

    3.SqlSessionFactory建立SqlSession

    4.SqlSession 通过代理创建出UserMapper接口的实例,并从userMapper.xml中读取信息

    5.通过userMapper.xml中的信息,执行sql语句

    6.返回结果,关闭session

  • 相关阅读:
    jchdl
    jchdl
    UVa 10256 (判断两个凸包相离) The Great Divide
    UVa 11168 (凸包+点到直线距离) Airport
    LA 2572 (求可见圆盘的数量) Kanazawa
    UVa 10652 (简单凸包) Board Wrapping
    UVa 12304 (6个二维几何问题合集) 2D Geometry 110 in 1!
    UVa 10674 (求两圆公切线) Tangents
    UVa 11796 Dog Distance
    LA 3263 (平面图的欧拉定理) That Nice Euler Circuit
  • 原文地址:https://www.cnblogs.com/kevinWu7/p/10163475.html
Copyright © 2011-2022 走看看