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

  • 相关阅读:
    2020-2021-1 20209305 《Linux内核原理与分析》第九周作业
    2020-2021-1 20209305 《Linux内核原理与分析》第八周作业
    2020-2021-1 20209305 《Linux内核原理与分析》第七周作业
    2020-2021-1 20209305 《Linux内核原理与分析》第六周作业
    2020-2021-1 20209305 《Linux内核原理与分析》第五周作业
    2020-2021-1 20209305 《Linux内核原理与分析》第四周作业
    2020-2021-1 20209305 《Linux内核原理与分析》第三周作业
    2020-2021-1 20209305 《Linux内核原理与分析》第二周作业
    2020-2021-1 20209309《Linux内核原理与分析》第十二周作业
    2020-2021-1 20209309《Linux内核原理与分析》第十一周作业
  • 原文地址:https://www.cnblogs.com/kevinWu7/p/10163475.html
Copyright © 2011-2022 走看看