zoukankan      html  css  js  c++  java
  • mybatis-01-简单概述基础点

    1、mybatis的优点

    mybatis:半自动化持久化框架

    • sql(专注数据)和java编码(专注业务)分离
    • 可使用简单的xml或者注解用于配置和原始映射
    • 将接口和java中的pojo映射成数据库中的记录
    • 可以理解为:业务代码+底层数据库的媒介

    2、创建mybatis的步骤(一)---配置

    1. 创建数据库、建表
    2. 搭建开发环境
    3. 导入jar包  

      log4j-1.2.17.jar

      mybatis-3.4.1.jar

      mysql-connector-java-5.1.7-bin.jar

    4. 添加配置文件

      mybatis-config.xml

    5. 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

       最终结构可参照下方图片:

    3、创建mybatis的步骤(二)---代码

    创建pojo对象User

    public class User {
        private int id;
        private String lastName;
        private int sex;
    }

     ②在src目录创建mybatis-config.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 数据源
                        POOLED    表示使用数据库连接池
                 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />  (此处填写数据库名称)
                    <property name="username" value="root" />  (数据库用户名)
                    <property name="password" value="root" />  (数据库密码)
                </dataSource>
            </environment>
        </environments>
        <!-- 引入sql语句对应的配置文件 -->
        <mappers>
            <mapper resource="com/atguigu/pojo/UserMapper.xml" />  (根据自己UserMapper.xml的位置更改路径,也可以写成通用的包名)
        </mappers>
    </configuration>

     ③创建UserMapper.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">
          <!-- 注释
            namespace 属性一般情况下。
                 一种定义规则:
                     ①使用对流的javaBean的全类名
                     ②使用Mapper接口的全类名
           -->
    <mapper namespace="com.atguigu.pojo.User">   (此处写全类名)
     <!-- 此处写相应的SQL语句 增删改查   -->
    </mapper>

    ④配置mybatis配置文件的提示:

    Config 文件的 key: http://mybatis.org/dtd/mybatis-3-config.dtd

    mapper文件的key: http://mybatis.org/dtd/mybatis-3-mapper.dtd

    • 搜索xml  --双击子文件 XML Catalog
    • add--进行添加
    • key--输入对应的Configuration和mapper的约束条件(dtd文件)
    • URI---一定要选择URI
    • File System  选择本地对应的文件添加

    可以按照图中的结构进行建包,进行编码测试

                   

     ⑤创建UserMapper接口

    public interface UserMapper {
        /*
         * 1、根据编号查询用户信息
         * 2、查询所有用户信息
         * 3、添加用户信息
         * 4、删除用户信息
         * 5、更新用户信息
         */
        public User findUserById(int id);
        
        public List<User> allFindUser();
        
        public int saveUser(User user);
        
        public int updateUser(User user);
        
        public int deleteUser(int id);
    }

    ⑥创建UserMapperTest类

    import java.io.IOException;
    import java.sql.Connection;
    import java.util.List;
    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.junit.Before;
    import org.junit.Test;
    import com.atguigu.mapper.UserMapper;
    import com.atguigu.pojo.User;
    (此处是通用代码)
    @SuppressWarnings("unused")
    public class UserMapperTest {
        private SqlSessionFactory factory;
        @Before
        public void before(){
            try {
                factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
    
        @Test
        //根据id查找
        public void testFindUserById() {
            /*
             * 1.factory创建session
             * 2.session通过代理模式 创建Mapper的实体类
             * 3、mapper实体类执行方法 并获取返回值
             * 4、输出内容
             * 5、关流
             */
            SqlSession session = factory.openSession();
            UserMapper userMapper = session.getMapper(UserMapper.class);
            User user = userMapper.findUserById(1);
            System.out.println(user);
            session.close();
        }
    
        @Test
        //查找所有
        public void testAllFindUser() {
            /*
             * 1.factory创建session
             * 2.session通过代理模式 创建Mapper的实体类
             * 3、mapper实体类执行方法 并获取返回值
             * 4、输出内容
             * 5、关流
             */
            SqlSession session = factory.openSession();
            UserMapper userMapper = session.getMapper(UserMapper.class);
            List<User> list = userMapper.allFindUser();
            System.out.println(list);
            session.close();
        }
        
        @Test
        //添加
        public void testAddUser(){
            SqlSession session = factory.openSession();
            UserMapper userMapper = session.getMapper(UserMapper.class);
            int saveUser = userMapper.saveUser(new User(1,"冷清秋",1));
            session.commit();   (需要进行提交,||不提交的结果:运行成功,但数据库无值)
            System.out.println(saveUser);
            session.close();
        }
        
        @Test
        //修改
        public void testUpdateUser(){
            SqlSession session = factory.openSession();
            UserMapper userMapper = session.getMapper(UserMapper.class);
            int updateUser = userMapper.updateUser(new User(1,"zhangsan",0));
            session.commit();
            System.out.println(updateUser);
            session.close();
        }
        
        @Test
        //删除
        public void deleteUser() {
            SqlSession session = factory.openSession();
            UserMapper userMapper = session.getMapper(UserMapper.class);
            int deleteUser = userMapper.deleteUser(12);
            session.commit();
            System.out.println(deleteUser);
            session.close();
        }
    }

    对应的UserMapper.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.atguigu.mapper.UserMapper">
    <!-- 
        namespace:名称空间(自定义名字)
        id:唯一标识
        resultType:返回值类型(写返回值类型的全类名)
        #{id}:从传递过来的参数中取出id值
     -->
     <!-- public User findUserById(int id); -->
    <select id="findUserById" resultType="cn.aynu.pojo.User">
        select* from user where id = #{id}
    </select>
    
    <!-- public List<User> allFindUser(); -->
    <select id="allFindUser" resultType="cn.aynu.pojo.User">
        select id,name,sex from user
    </select>
    
    <insert id="saveUser" parameterType="cn.aynu.pojo.User">
        insert into user(name,sex) values(#{name},#{sex})
    </insert>
    
    <update id="updateUser">
        update user set name = #{name},sex=#{sex} where id = #{id}
    </update>
    
    <delete id="deleteUser">
        delete from user where id = #{id}
    </delete>
    </mapper>

     敲小黑板:

    1、当返回值是void的时候,resultType可以省略不写

    2、当数据是基本数据类型的时候,resulttype可以省略不写

    但是建议全部都加上,代码更规范,别人看之后通俗易懂,id和resultType一一对应  

    ***不加resultType的错误***

  • 相关阅读:
    第3章 Python的数据结构、函数和文件
    字符与编码
    第2章 IPython和Jupyter
    第1章 准备工作
    (转)详解Python的装饰器
    (转)Python中的split()函数
    5.5 用户定义的可调用类型
    2.6 序列的增量赋值
    Zookeeper简析
    Dubbo-服务引入源码分析
  • 原文地址:https://www.cnblogs.com/zly123/p/11609591.html
Copyright © 2011-2022 走看看