zoukankan      html  css  js  c++  java
  • 使用maven创建项目配置mybatis

    一个mybatis的构建需要六部分:依赖包的导入,创建pojo,配置核心配置文件,配置映射文件,创建mybatis的工具类,测试

    1.首先在myeclipse中创建一个maven项目,然后导入依赖包

    <dependencies>
            <!-- mybatis核心包 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.2.8</version>
            </dependency>
            <!-- jdbc的包 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.32</version>
            </dependency>
            <!-- 查看日志文件的log4j包 -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.12</version>
            </dependency>
            <!-- 测试用的依赖包 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
            </dependency>
        </dependencies>

    2.创建一个Student的pojo

    注意:如果数据表字段是int类型的数据,建议pojo中使用Integer来修饰,因为int的默认值是0,不是null,可能在进行sql操作时出错,

    private Integer id;
    
        private String sname;
    
        private String address;
    
        private String sex;
    
        private Integer tid;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getSname() {
            return sname;
        }
    
        public void setSname(String sname) {
            this.sname = sname == null ? null : sname.trim();
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address == null ? null : address.trim();
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex == null ? null : sex.trim();
        }
    
        public Integer getTid() {
            return tid;
        }
    
        public void setTid(Integer tid) {
            this.tid = tid;
        }
    
        @Override
        public String toString() {
            return "Student [id=" + id + ", sname=" + sname + ", address=" + address + ", sex=" + sex + ", tid=" + tid
                    + "]";
        }

    3.创建mybatis的核心配置文件

    mybatis的核心配置文件并不像hibernate一样必须使用特定的名称,这里我创建的是mybatis.xml

    在对jdbc的连接配置时,可以通过properties文件,也可以不使用,如果使用的话,需要在标签的最上面使用<properties resource="db.properties"></properties>来引入自己配置的properties文件,并在下面通过${}来引用properties中的属性名

    <?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="db.properties"></properties>
        <!-- 接收数据库的数据源(元数据) default默认读取以下的配置 -->
        <environments default="mysql">
            <!-- 针对不同的数据库来配置元数据 id:区分元数据 -->
            <!-- 配置MySQL -->
            <environment id="mysql">
                <!-- 事务的管理交给jdbc管理 -->
                <transactionManager type="jdbc" />
                <!-- 不使用properties手动配置
                    <dataSource type="pooled">
                        <property name="driver" value="com.mysql.jdbc.Driver" />
                        <property name="url" value="jdbc:mysql://localhost:3306/test" />
                        <property name="username" value="root" />
                        <property name="password" value="root" />
                    </dataSource> 
                -->
                <!-- 使用properties加载properties中的属性 -->
                <dataSource type="pooled">
                    <property name="driver" value="${driver}" />
                    <property name="url" value="${url}" />
                    <property name="username" value="${username}" />
                    <property name="password" value="${password}" />
                </dataSource>
            </environment>
    
            <!-- 配置Oracle -->
            <environment id="oracle">
                <!-- 事务的管理交给odbc管理 -->
                <transactionManager type="jdbc" />
                <dataSource type="pooled">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:oracle:thin:@localhost:1521/test" />
                    <property name="username" value="scott" />
                    <property name="password" value="123456" />
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="StudentMapper.xml" />
        </mappers>
    </configuration>
    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/test
    username=root
    password=root

    4.创建映射文件

    <?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命名必须是唯一的,前期可以直接以所映射的pojo类的唯一路径来命名 -->
    <mapper namespace="com.oracle.pojo.Student">
        <!-- 
            mybaits通过自己手动写sql语句来对数据库进行操作,select就是查询操作
            同样有update,delete,insert
            id:标识符,测试时调用的标识符来调用sql语句,相当于方法名
            resultType:返回值类型
            parameterType:传入的参数类型
            如果是引用数据类型的话,需要传入完整的路径.如:java.lang.String以及对象com.oralc.pojo.Student
            在下方的条件需要以#{}来占位,如果传入类型是对象型,需要与对象的属性名一致
         -->
        <select id="findStudentById" resultType="com.oracle.pojo.Student" parameterType="int">
            select * from student where id=#{id}
        </select>
        <select id="findAll" resultType="com.oracle.pojo.Student">
            select * from student
        </select>
    </mapper>

    5.创建mybatis的工具类

    这里使用ThreadLocal类,用来绑定线程,当程序执行时作为一个线程,无论执行到dao层或是其他层,从该线程中获取的session都是同一个session

    public class MybatisUtil {
        private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
        private static SqlSessionFactory sqlSessionFactory;
    
        static {
            try {
                // 读取mybatis核心配置文件
                Reader reader = Resources.getResourceAsReader("mybatis.xml");
                // 创建会话工厂
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        public static SqlSession getSession() {
            // 获取会话
            SqlSession sqlSession = threadLocal.get();
            if (sqlSession == null) {
                // 从会话工厂获取session
                sqlSession = sqlSessionFactory.openSession();
                // 绑定会话工厂
                threadLocal.set(sqlSession);
            }
            return sqlSession;
        }
    
        public static void close() {
            SqlSession sqlSession = threadLocal.get();
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
    }

    6.测试

    public class Test {
        private SqlSession session = null;
    
        @Before
        public void before() {
            //获取会话
            session = MybatisUtil.getSession();
        }
    
        @org.junit.Test
        public void add() {
            /**
             * 从会话中调用映射文件中的sql语句,为了防止不同的映射文件标识符重复,通过namespace.标识符来调用
             * 如果后面有参数的话,在后面添加参数
             */
            Student student = session.selectOne("com.oracle.pojo.Student.findStudentById",1);
            System.out.println(student);
            List<Student> studentList = session.selectList("com.oracle.pojo.Student.findAll");
            for (Student student2 : studentList) {
                System.out.println(student2);
            }
        }
    
        @After
        public void after() {
            session.commit();
            MybatisUtil.close();
        }
    }

    测试结果

     

  • 相关阅读:
    八数码难题 (codevs 1225)题解
    小木棍 (codevs 3498)题解
    sliding windows (poj 2823) 题解
    集合删数 (vijos 1545) 题解
    合并果子 (codevs 1063) 题解
    等价表达式 (codevs 1107)题解
    生理周期 (poj 1006) 题解
    区间 (vijos 1439) 题解
    区间覆盖问题 题解
    种树 (codevs 1653) 题解
  • 原文地址:https://www.cnblogs.com/mhm111/p/11383885.html
Copyright © 2011-2022 走看看