zoukankan      html  css  js  c++  java
  • MyBatis 基础

    1.在src下创建一个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>
        <!-- default:指默认使用id为defaultr的 environment配置
            一个environments下可以有多个environment-->
        <environments default="default">
            <environment id="default">
                <!-- 使用原生jdbc事务 -->
                <transactionManager type="JDBC"></transactionManager>
                <!-- 使用数据库连接池 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
                    <property name="username" value="root"/>
                    <property name="password" value="admin"/>
                </dataSource>
            </environment>
        </environments>
        <!-- 读取mapper -->
        <mappers>
            <mapper resource="com/strong/mapper/FlowerMapper.xml"/>
        </mappers>
    </configuration>

    2.新建一个包com.strong.mapper,在包下创建FlowerMapper.xml文件(类名.mapper.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:命名,可以随意取 -->
    <mapper namespace="com.strong.mapper">
        <!-- resultType:实体类,要写类命名  id:命名 -->
        <select resultType="com.strong.pojo.Flower" id="selectAll">
            select * from flower    
        </select>
    </mapper>

    3.测试MyBatis

    public class Test {
        public static void main(String[] args) throws IOException {
            //读取XML文件
            InputStream is=Resources.getResourceAsStream("myBatis.xml");
            //创建SqlSessionFactory工厂
            SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
            //生产一个SqlSession对象
            SqlSession session=factory.openSession();
            //读取数据库
            List<Flower> list=session.selectList("com.strong.mapper.selectAll");
            for(Flower flower:list) {
                System.out.println(flower);
            }
        }
    }

     三种常查询方式:

    1.

    返回一个List对象,适用于查询需要遍历的结果

    List<Flower> list=session.selectList("com.strong.mapper.selectAll");
            for(Flower flower:list) {
                System.out.println(flower);
            }
    <select resultType="com.strong.pojo.Flower" id="selectAll">
            select * from flower    
    </select>

    2.

    返回一个Object对象,适用于查询一条数据

            int count=session.selectOne("com.strong.mapper.selectOne");
            System.out.println(count);
    <select resultType="int" id="selectOne">
            select count(*) from flower    
    </select>

    3.

    返回一个map,适用于需要对查询结果再次筛选(通讯录)

            Map<Object,Object> map=session.selectMap("com.strong.mapper.selectMap", "name");//name为map的key
            System.out.println(map);
    <select resultType="com.strong.pojo.Flower" id="selectMap">
            select * from flower    
    </select>

     MyBatis日志输出方法

    1.在myBatis配置文件中加入<stttings>

        <settings>
            <setting name="logImpl" value="LOG4J"/>
        </settings>

    2.在log4j.propertie 中设置输出级别

    log4j.rootCategory=ERROR, CONSOLE,LOGFILE
    
    log4j.logger.com.strong.mapper=DEBUG //包级别,类级别,方法级别

    parameterType使用:

    可以使用#{ }和¥{ }获取参数:

    #{} 和${} 的区别:


     #{} 获取参数的内容支持索引获取,param1 获取指定位置参数,
      并且SQL 使用?占位符


     ${} 字符串拼接不使用?,默认找${内容}内容的get/set 方法,如
      果写数字,就是一个数字

         <!-- 相当于:Preparing: select * from flower where id=?  -->
      <select resultType="com.strong.pojo.Flower" id="selectForId" parameterType="int"> select * from flower where id=#{0} </select>

      
      <!-- 相当于:Preparing: select * from flower where id=0 -->
      <
    select resultType="com.strong.pojo.Flower" id="selectForId" parameterType="int"> select * from flower where id=${0} </select>

    //selectXXX方法第二个参数为sql查询参数
    Flower flower=session.selectOne("com.strong.mapper.selectForId",1);
      <select resultType="com.strong.pojo.Flower" id="selectForId" parameterType="com.strong.pojo.Flower">
            select * from flower where id=${id} <!-- 传入类的查询方法,大括号内写类的成员名称,myBatis低层调用get方法-->
        </select>
           Flower flower=new Flower();
                flower.setId(2);
                Flower flower2=session.selectOne("com.strong.mapper.selectForId",flower);
                System.out.println(flower2);

    使用map作为参数的使用方法:

        <select resultType="com.strong.pojo.Flower" id="selectMap" parameterType="map">
            select * from flower where id=#{id} or name=#{name}
        </select>
    Map<String,Object> map=new HashMap<String,Object>();
    map.put("name","菊花");map.put("id", 2);
    List<Flower> list=session.selectList("com.strong.mapper.selectMap", map);
    for(Flower f:list){
          System.out.println(f);
    }

    实现分页

    //每页显示几个
    int pageSize=3;
    //第几页
    int pageNumber=3;
    //计算好结果再传入
    int pageStart=pageSize*(pageNumber-1);
    Map<String,Integer> map=new HashMap<String,Integer>();
    map.put("pageSize", pageSize);
    map.put("pageStart", pageStart);
    List<Flower> list=session.selectList("com.strong.mapper.page",map);
    for(Flower f:list) {
        System.out.println(f);
    }
        <select resultType="com.strong.pojo.Flower" id="page" parameterType="map">
            select * from flower limit #{pageStart},#{pageSize}
        </select>

     别名:

    在myBatis中配置typeAliases属性

        <typeAliases>
            <typeAlias type="com.strong.pojo.Flower" alias="flower"/>
            <package name="com.strong.pojo"/> 
        </typeAliases>

    插入数据方法:

        <select id="insert" parameterType="Flower">
            insert into flower values(default,#{name},#{price},#{production})
        </select>
    Flower f=new Flower(1,"newName",3.14,"test");
    session.insert("com.strong.mapper.insert",f);
    session.commit();

    事务回滚:.如果在一个事务中某个SQL 执行事务,希望回归到事务的原点,保证数据库数据的完整性.

                Flower f=new Flower(1,"newName",3.14,"Test");
                try {
                    session.insert("com.strong.mapper.insert",f);
                }catch(Exception e) {
                    System.out.println("插入失败");
                    session.rollback();//回滚
                }
                session.commit();
  • 相关阅读:
    第八节 JS运动基础
    第七节 DOM操作应用-高级
    第六节 DOM操作应用
    第五讲 DOM基础
    第二节 数学基础与语言学基础
    第一节 自然语言处理概论
    第0节 课程简述
    第四节 定时器
    基本概念
    常用命令
  • 原文地址:https://www.cnblogs.com/lastingjava/p/9926362.html
Copyright © 2011-2022 走看看