zoukankan      html  css  js  c++  java
  • MyBatis入门

    MyBatis入门

    maven依赖

    • junit 4.11 测试用
    • mysql-connector-java 5.1.17 连接mysql
    • mybatis 3.2.7 框架
    • log4j 1.2.17 日志记录
    <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.17</version>
        </dependency>
    
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.2.7</version>
        </dependency>
    
        <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.17</version>
        </dependency>
      </dependencies>
    

    依赖相关的配置

    log4j.properties

    # Global logging configuration
    log4j.rootLogger=DEBUG, stdout
    # Console output...
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
    

    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="jdbc.properties">
    		<property name="jdbc.username" value="root1"/>
    		<property name="jdbc.password" value="root"/>
    	</properties>
    	
    	<typeAliases>
    		<!-- 单个别名定义,别名的使用,不区分大小写 -->
    		<!-- <typeAlias type="com.itheima.mybatis.pojo.User" alias="user"/> -->
    		<!-- 别名包扫描器:别名是类的全称,不区分大小写,推荐方式 -->
    		<package name="com.itheima.mybatis.pojo"/>
    	</typeAliases>
    	
    	<!-- 和spring整合后 environments配置将废除 -->
    	<environments default="development">
    		<environment id="development">
    			<!-- 使用jdbc事务管理 -->
    			<transactionManager type="JDBC" />
    			<!-- 数据库连接池 -->
    			<dataSource type="POOLED">
    				<property name="driver" value="${jdbc.driver}" />
    				<property name="url" value="${jdbc.url}" />
    				<property name="username" value="${jdbc.username}" />
    				<property name="password" value="${jdbc.password}" />
    			</dataSource>
    		</environment>
    	</environments>
    	
    	<!-- 加载映射文件 -->
    	<mappers>
    		
    		<!-- 映射文件包扫描,推荐方式:
    			 1、接口文件必须与映射文件同一目录下
    			 2、接口文件名称必须与映射文件的名称一致 -->
    		<package name="com.itheima.mybatis.mapper"/>
    	</mappers>
    </configuration>
    
    

    user.xml映射查询xml

    首先创建好User的pojo类(domain/bean)

    <?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="user">
        <!--
            id是之后java中唯一标识
            parameterType:之后调用要传回的参数类型
            resultType:返回的结果类型(如果是list也是用list中每个单一的元素
    
            变量的使用: #{id}  如果参数类型是普通值,大括号中的变量名可以任意命名
                        '${value}' 如果参数是String,则一定要用${value},用单引号'',前后可自由增加字符串如'%${value}%'
                        
            关于在插入数据中,将自动生成的主键返回给对象的用法
            1. <insert (省略id/parameterType) useGeneratedKeys="true" keyProperty="id">          
            2. 增加以下语块,赋值是调用mysql中的函数LAST_INSERT_ID(),order表示执行顺序,after为在插入执行完之后再操作,如果是主动设置UUID,则要改为before
                <selectKey keyProperty="id" resultType="int" order="AFTER">
                    SELECT LAST_INSERT_ID()
                </selectKey>
        -->
        <select id="getUserById" parameterType="int" resultType="cn.edu.zju.mybaits.pojo.User">
            SELECT 	`id`,
                    `username`,
                    `birthday`,
                    `sex`,
                    `address`
            FROM
                    `user`
            WHERE   id = #{id}
        </select>
    
        <select id="getUserByUserName" parameterType="string" resultType="cn.edu.zju.mybaits.pojo.User">
            SELECT 	`id`,
                      `username`,
                      `birthday`,
                      `sex`,
                      `address`
    
            FROM `user`
            WHERE username LIKE '%${value}%'
        </select>
    
        <!--插入用户-->
        <insert id="insertUser" parameterType="cn.edu.zju.mybaits.pojo.User" useGeneratedKeys="true" keyProperty="id">
            <!--<selectKey keyProperty="id" resultType="int" order="AFTER">-->
                <!--SELECT LAST_INSERT_ID()-->
            <!--</selectKey>-->
            INSERT INTO `user`
                    (`username`,
                     `birthday`,
                     `sex`,
                     `address`
                    )
            VALUES
                    (#{username},
                     #{birthday},
                     #{sex},
                     #{address}
                    );
        </insert>
    
        <update id="updateUser" parameterType="cn.edu.zju.mybaits.pojo.User">
            UPDATE
                `user`
            SET
                `username` = #{username}
                WHERE `id` = #{id}
        </update>
    
        <delete id="deleteUser" parameterType="int">
            DELETE FROM `user`
            WHERE
                `id` = #{Id} ;
        </delete>
    </mapper>
    
    

    java类

    工具类 SqlSessionFactoryUtils

    //不把SqlSession放进来是因为官方推荐SqlSession单独线程
    public class SqlSessionFactoryUtils {
        private static SqlSessionFactory sqlSessionFactory;
    
        static {
            try {
                //创建SqlSessionFactoryBuilder对象
                SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
                //创建核心配置文件的输入流
                InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
                //通过输入流创建SqlSessionFactory对象
                sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public static SqlSessionFactory getSqlSessionFactory() {
            //sqlSessionFactory单例
            return sqlSessionFactory;
        }
    }
    

    增删改查代码

    public class UserDaoImpl implements UserDao {
      @Override
      public User getUserById(Integer id) {
        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
        User user = sqlSession.selectOne("user.getUserById", id);
        sqlSession.close();
        return user;
      }
    
      @Override
      public List<User> getUserByUserName(String userName) {
        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
        List<User> list = sqlSession.selectList("user.getUserByUserName", userName);
        sqlSession.close();
        return list;
      }
    
      @Override
      public void insertUser(User user) {
        /*
         * SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession()
         * openSession()里面没写true,则最后要提交事件    sqlSession.commit()
         */
        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession(true);
        sqlSession.insert("user.insertUser", user);
        sqlSession.close();
      }
    }
    
  • 相关阅读:
    Hash表的查找-C语言
    二叉排序树-C语言
    线性表的查找算法-C语言
    拓扑排序和关键路径
    图结构的创建与遍历-C语言
    MySQL数据库基本脚本命令
    哈夫曼树编码-C语言
    协程简述
    Python多线程编程-Threading库
    Python多进程编程-multiprocessing库
  • 原文地址:https://www.cnblogs.com/richardwlee/p/10455748.html
Copyright © 2011-2022 走看看