MyBatis配置、基础用法、动态代理用法CURD

创建一个mapper.xml文件

其中mapper标签的 namespace 内填入映射文件的全类名(既本文件路径 包名+文件名)
sql标签中,id是此查询语句的标识,resultType是返回的数据类型,paramenterType是传入的数据类型 需要注意的是,如果如果传入的是实体类,则需要填入此实体类的包名+类名,并且,Mybatis只支持传入一个参数。

sql语句内容

在Mybatis中的slq语句不需分号,且待输入的内容用 #{ } 或 ${value} 来替代。
#{ } 中的{ }可以输入任意内容,#{xxx}会被处理成带单引号的文本,例如传入数据abc,则会被处理成 ‘abc’ 。注意,若传入的是实体类,则需要严格区分大小写。
${value} 中{ }只可填入value,并且不会被自动加上单引号,需要手动添加,如 ’ ${value} ’ 。

<?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.test.entity.personMapper">

  <select id="queryPersonById"  resultType="com.test.entity.Person" parameterType="int">
    select * from person where id = #{id}
  </select>
  
</mapper>

创建一个conf.xml文件

此文件需要在mappers中填入mapper.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 type="POOLED">//连接池方式
        <!-- 配置数据库信息 -->
        <property name="driver" value="com.mysql.jdbc.Driver"/> //数据库驱动
        <property name="url" value="jdbc:mysql://localhost:3306/temp?useSSL=false"/> //连接地址
        <property name="username" value="root"/> //数据库账户
        <property name="password" value="000000"/> //数据库密码
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/test/mapper/personMapper.xml"/> //mapper.xml文件位置
  </mappers>
</configuration>

使用Mybatis

Mybatis以字符流的方式读取配置文件,步骤如下
首先,Resources.getResourceAsReader(“conf.xml”)得到reader ,
并用SqlSessionFactoryBuilder().build(reader)命令生成工厂sessionFactory,
使用sessionFactory的openSession()命令得到session,
得到的session即相当于JDCB的connection。

基础方式实现CURD

写statement文本,即选择对应的mapper+对应的sql语句的id,namespace.id。写好statement之后,使用selectOne(如果结果集只有一条的话)命令,参数1填入statement,参数2填入需要传入的参数,没有则不填,最后用对应的数据类型来接收。结束不要忘记close()。

public class TestMyBatis {
     public static void main(String[] args) throws  IOException {
        queryPerson();
     }
     
     public static void queryPerson() throws IOException  {
          //加载MyBatis配置文件
          Reader reader =  Resources.getResourceAsReader("conf.xml");
          SqlSessionFactory sessionFactory = new  SqlSessionFactoryBuilder().build(reader);
          //session 相当于 JDBC的 connection
          SqlSession session =  sessionFactory.openSession();
          String statement =  "com.test.entity.personMapper.queryPersonById";
          Person person = session.selectOne(statement,1);
          System.out.println(person);
          session.close();
     }
}

使用动态代理方式实现CURD

与基础方式不同的是,动态代理方式需要写好一个接口,使其省略掉了statement的书写,可根据约定,直接定位出SQL语句。

匹配的过程

1.有了接口后,Mybatis可以通过接口名称找到对应的mapper.xml文件,所以需要保证mapper的namespace=接口全类名(包名+类名)
2.根据接口的方法名,找到mapper中对应的sql的id,接口的传入、接收数据类型均需与id的接收、返回值相对应。

创建接口:
package com.test.mapper;
import java.util.List;
import com.test.entity.Person;
public interface PersonMapper {
	
    	Person queryPersonById(int id);
    	void deletePersonById(int id);
    	void insertPerson(Person person);
    	void updatePersonById(Person person);
    List<Person> queryAllPersonById();//对应的mapper返回类型是Person,不需List<Person>,数组等同理
    List<Person> queryAllPersonSortById(String a);
	
}

修改mapper.xml的namesapce=接口的全类名

<mapper namespace="com.test.mapper.PersonMapper">
使用:

与基础方式相似,删除statement与使用的selectOne等命令。先使用session.getMapper方法,传入mapper.class得到返回的数据后,使用其中的函数即可

//基础方式的
String statement =  "com.test.entity.personMapper.queryPersonById";
Person person = session.selectOne(statement,1);         

//动态代理方式
PersonMapper personMapper =  session.getMapper(PersonMapper.class);
Person person = personMapper.queryPersonById(1);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值