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();
原文地址:https://www.cnblogs.com/lastingjava/p/9926362.html