zoukankan      html  css  js  c++  java
  • MyBatis学习-偏实践(单独MyBatis项目)

    准备先把MyBatis搞熟悉了,然后把SpringMVC搞熟悉了。

    MyBatis的材料,除了我之前自己实验的

    http://www.cnblogs.com/charlesblc/p/5906431.html

    还有这个:

    http://www.cnblogs.com/charlesblc/p/5939505.html

    现在主要参考以下两个:

    http://www.cnblogs.com/charlesblc/p/5906431.html (转载自 http://www.yihaomen.com/article/java/302.htm)

    http://limingnihao.iteye.com/blog/781671

    可能还有这个: http://www.cnblogs.com/xdp-gacl/p/4261895.html

    利用Idea重新开始搭建:

    按照这个页面:http://www.yihaomen.com/article/java/303.htm 写了一些代码。(整理好的版本在后面给出)

    运行, 开始没有找到配置文件:

    java.io.IOException: Could not find resource /Users/baidu/Documents/Data/Work/Code/Self/mybatis-demo/target/classes/resources/Mybatis.xml

    本来以为需要配置才能把Resources里面的文件放到编译目标目录。上网查之后发现是自动放的。后来发现文件貌似是在:

    /Users/baidu/Documents/Data/Work/Code/Self/mybatis-demo/target/classes

    然后用了

    String configFile = Class.class.getClass().getResource("/").getPath().toString() + "Mybatis.xml";
    reader = Resources.getResourceAsReader(configFile);

    还是报错找不到,但是报错信息中的文件,是实际存在的。

    怀疑是不是不能用绝对路径,所以改了一下:

    reader = Resources.getResourceAsReader("Mybatis.xml");

    发现可以了。哈哈。

    整理代码结构如下,其中红框内的是实际用到的文件:

    在开发之前,在数据库中建立一个表。注意其中语句G表示Gracefully显示,垂直显示。另外,如果结果出现乱码,查看之前Mysql修正乱码的帖子。

    mysql> use springdemo;
    Database changed
    mysql> show create table user G 
    *************************** 1. row ***************************
           Table: user
    Create Table: CREATE TABLE `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `nickname` varchar(45) DEFAULT NULL,
      `password` varchar(45) DEFAULT NULL,
      `first_name` varchar(45) DEFAULT NULL,
      `last_name` varchar(45) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    
    mysql> select * from user;
    +----+------------+----------+------------+-----------+
    | id | nickname   | password | first_name | last_name |
    +----+------------+----------+------------+-----------+
    |  1 | chaoliu    | 321      | chao       | liu       |
    |  3 | micro      | 123      | bill       | gates     |
    |  5 | helloworld | 123      | hello      | world     |
    |  7 | 你好     | 123      | 中        | 文       |
    +----+------------+----------+------------+-----------+
    4 rows in set (0.00 sec)

    然后看工程里面各个文件:

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.myapp</groupId>
        <artifactId>mybatis-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <!-- mybatis版本号 -->
            <mybatis.version>3.2.8</mybatis.version>
    
            <!-- mysql驱动版本号 -->
            <mysql-driver.version>5.1.29</mysql-driver.version>
    
            <!-- log4j日志包版本号 -->
            <slf4j.version>1.7.18</slf4j.version>
            <log4j.version>1.2.17</log4j.version>
    
        </properties>
    
        <dependencies>
    
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
    
            <!-- 添加mysql驱动依赖 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-driver.version}</version>
            </dependency>
    
            <!-- 添加日志相关jar包 -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
    
        </dependencies>
    
    </project>

    Mybatis.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>
        <typeAliases>
            <typeAlias alias="User" type="com.myapp.mybatis.model.User"/>
        </typeAliases>
    
        <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://[host]:8306/springdemo" />
                    <property name="username" value="root"/>
                    <property name="password" value="[password]"/>
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <mapper resource="User.xml"/>
        </mappers>
    </configuration>

    User.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="com.myapp.mybatis.models.UserMapper">
        <select id="selectUserByID" parameterType="int" resultType="User">
            select * from `user` where id = #{id}
        </select>
    </mapper>

    User.java

    package com.myapp.mybatis.model;
    
    /**
     * Created by baidu on 16/10/18.
     */
    public class User {
        private int id;
        private String nickname;
    
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getNickName() {
            return nickname;
        }
        public void setUserName(String nickName) {
            this.nickname = nickName;
        }
    }

    Test.java

    package com.myapp.mybatis.test;
    
    import com.myapp.mybatis.model.User;
    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 org.apache.log4j.lf5.util.Resource;
    
    import java.io.Reader;
    
    /**
     * Created by baidu on 16/10/18.
     */
    public class Test {
        private static SqlSessionFactory sqlSessionFactory;
        private static Reader reader;
    
        static {
            try {
                //String configFile = Class.class.getClass().getResource("/").getPath().toString() + "Mybatis.xml";
                reader = Resources.getResourceAsReader("Mybatis.xml");
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static SqlSessionFactory getSession() {
            return sqlSessionFactory;
        }
    
        public static void main(String[] args) {
            SqlSession session = sqlSessionFactory.openSession();
            try {
                User user = (User)
                        session.selectOne("com.myapp.mybatis.models.UserMapper.selectUserByID", 1);
                System.out.printf("Get user id: %d, nickname: %s
    ", user.getId(), user.getNickName());
            } finally {
                session.close();
            }
        }
    }

    然后运行,用基本的java环境运行即可。运行结果如下:

    /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/bin/java -Didea.launcher.port=7532 "-Didea.launcher.bin.path=/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/tools.jar:/Users/baidu/Documents/Data/Work/Code/Self/mybatis-demo/target/classes:/Users/baidu/.m2/repository/org/mybatis/mybatis/3.2.8/mybatis-3.2.8.jar:/Users/baidu/.m2/repository/mysql/mysql-connector-java/5.1.29/mysql-connector-java-5.1.29.jar:/Users/baidu/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar:/Users/baidu/.m2/repository/org/slf4j/slf4j-api/1.7.18/slf4j-api-1.7.18.jar:/Users/baidu/.m2/repository/org/slf4j/slf4j-log4j12/1.7.18/slf4j-log4j12-1.7.18.jar:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar" com.intellij.rt.execution.application.AppMain com.myapp.mybatis.test.Test
    log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).
    log4j:WARN Please initialize the log4j system properly.
    log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
    Get user id: 3, nickname: micro
    
    Process finished with exit code 0
  • 相关阅读:
    Single Number II
    Pascal's Triangle
    Remove Duplicates from Sorted Array
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Unique Paths
    Sort Colors
    Swap Nodes in Pairs
    Merge Two Sorted Lists
    Climbing Stairs
  • 原文地址:https://www.cnblogs.com/charlesblc/p/5973071.html
Copyright © 2011-2022 走看看