MyBatis入门第一部分
Posted 大忽悠爱忽悠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis入门第一部分相关的知识,希望对你有一定的参考价值。
MyBatis入门
- 官方中文帮助手册
- 快速入门
- 小总结(注意事项)
- 全局配置文件
- 类型处理器(typeHandlers)
- 插件(plugins)
- 数据库厂商标识(databaseIdProvider)-----考虑数据库移植性,切换数据库----了解
- 映射器(mappers)---掌握---写好的sql映射文件需要使用mappers注册起来
- SQL映射文件-----主要看文档,这里只列举常用部分
- 获取自增主键的值----useGeneratedKeys和keyProperty
- 获取非自增注解的值
- xml配置过程中查询语句参数的各种取值
- 如果参数传入map,那么查询时,可以通过$ { key }查到对应的值
- 参数传递的总结
- #{key}取值的时候可以设置一些规则
- # { } 与 $ { } 取值的区别
- 如果查询返回的是List集合,resultType=""--->写的是集合里面元素的类型
- 如果查询出来的是单条map记录,那么列名作为key,值作为value,并且resultType="":这里填的也是map的全类名
- 默认mybaits自动封装结果集
- resultMap自定义封装规则----自己决定数据库中每一列和类中哪个属性进行匹配
- 联合查询
官方中文帮助手册
快速入门
导入依赖
<!--MyBaits依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!--log4j日志依赖-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
<!--mysql驱动的坐标-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
环境搭建
数据库表的环境搭建:
javaBean:(封装数据)
public class people {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "people{" +
"name='" + name + '\\'' +
", age=" + age +
'}';
}
}
Dao接口,操作数据库:
public interface peopleDao {
//按照姓名查询员工
public people getPeoByName(String name);
}
mybaits全局配置文件,指导mybaits如何正确运行,比如连接哪个数据库
<?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/tx"/>
<property name="username" value="root"/>
<property name="password" value="126433"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
sql映射的配置文件(编写每一个方法都如何向数据库发送sql语句,如何指向sql语句),相当于接口的实现类
1.第一步: 将mapper的namespace属性改为接口的全类名
2.第二步:配置细节
<?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: 名称空间:写接口的全类名,相当于告诉mybaits这个配置文件是实现哪个接口的-->
<mapper namespace="Com.MyBaits.peopleDao">
<!--select: 用来定义一个查询操作
id:方法名,相当于这个配置是对某个方法的实现
resultType:指定方法运行后的返回值类型(查询操作必须指定的),写全类名
#{属性名}:代表取出传递过来的某个参数的值-->
<select id="getPeoByName" resultType="Com.MyBaits.people">
select * from people where name = #{name}
</select>
</mapper>
3.第三步:我们写的dao接口的实现文件,mybaits默认是不知道的,我们需要在全局配置文件中注册
<?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/tx"/>
<property name="username" value="root"/>
<property name="password" value="126433"/>
</dataSource>
</environment>
</environments>
<!--引入我们自己编写的每一个接口的实现文件-->
<mappers>
<!--resource: 表示从类路径下找资源-->
<!--如果people.xml放在了peo包下,那么这里路径写peo/people.xml-->
<mapper resource="people.xml"/>
</mappers>
</configuration>
配置总结—两个配置—全局配置文件指导mybaits如何运行----dao接口的实现文件,描述dao中每个方法如何工作
测试
第一步:根据全局配置文件先创建一个SqlSessionFactory对象(cv即可,注意修改配置文件的名字)
//1.根据全局配置文件创建出一个SqlSessionFactory
//SqlSessionFactory:是Sqlsession工厂,负责创建Sqlsession对象
//Sqlsession:sql会话(代表和数据库的一次会话)
String resource = "MyBaits-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
第二步:SqlSessionFactory中获取sqlSession对象操作数据库即可(cv即可)
//2.获取和数据库的一次会话:getConnection()
SqlSession sqlSession = sqlSessionFactory.openSession();
people dhy;
try{
//3.使用sqlsession操作数据库,获取到dao接口的实现
peopleDao peoDao = sqlSession.getMapper(peopleDao.class);
//4.调用方法
dhy = peoDao.getPeoByName("大忽悠");
}finally {
sqlSession.close();
}
System.out.println(dhy);
完整代码:
public class main {
public static void main(String[] args) throws IOException {
//1.根据全局配置文件创建出一个SqlSessionFactory
//SqlSessionFactory:是Sqlsession工厂,负责创建Sqlsession对象
//Sqlsession:sql会话(代表和数据库的一次会话)
String resource = "MyBaits-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2.获取和数据库的一次会话:getConnection()
SqlSession sqlSession = sqlSessionFactory.openSession();
people dhy;
try{
//3.使用sqlsession操作数据库,获取到dao接口的实现
peopleDao peoDao = sqlSession.getMapper(peopleDao.class);
//4.调用方法
dhy = peoDao.getPeoByName("大忽悠");
}finally {
sqlSession.close();
}
System.out.println(dhy);
}
}
增删改查演示
peo接口:
public interface peopleDao {
//按照姓名查询员工
public people getPeoByName(String name);
//更新员工
public boolean updatePeo(people peo);
//删除员工
public Integer deletePeo(people peo);
//插入员工
public Long insertPeo(people peo);
}
people.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: 名称空间:写接口的全类名,相当于告诉mybaits这个配置文件是实现哪个接口的-->
<mapper namespace="Com.MyBaits.peopleDao">
<!--select: 用来定义一个查询操作
id:方法名,相当于这个配置是对某个方法的实现
resultType:指定方法运行后的返回值类型(查询操作必须指定的),写全类名
#{属性名}:代表取出传递过来的某个参数的值-->
<select id="getPeoByName" resultType="Com.MyBaits.people">
select * from people where name = #{name}
</select>
<update id="updatePeo">
update people set name=#{name},age=#{age}
where name=#{name}
</update>
<delete id="deletePeo">
delete from people where name=#{name}
</delete>
<insert id="insertPeo">
insert into people values(#{name},#{age})
</insert>
</mapper>
测试主类:
public class main {
static SqlSessionFactory sqlSessionFactory;
//将创建工厂这段重复代码抽取处理,工厂只有一个,但是每次获取连接,都是不同的连接
static public void initSqlSessionFactory() throws IOException {
String resource = "MyBaits-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
public static void main(String[] args) throws IOException {
//创建工厂镀锡
initSqlSessionFactory();
//2.获取和数据库的一次会话:getConnection()
SqlSession sqlSession = sqlSessionFactory.openSession();
people dhy;
try{
//3.使用sqlsession操作数据库,获取到dao接口的实现(映射器)
peopleDao peoDao = sqlSession.getMapper(peopleDao.class);
//4.调用方法
//1.查询
dhy = peoDao.getPeoByName("大朋友");
//2.增加
Long ins=peoDao.insertPeo(new people("超级大忽悠",19));
//3.修改
boolean ret=peoDao.updatePeo(new people("大忽悠",520));
//4.删除
int del=peoDao.deletePeo(new people("大朋友",20));
System.out.println("增添的结果:"+ins);
System.out.println("修改的结果为:"+ret);
System.out.println("删除的结果为:"+del);
}finally {
//手动提交
sqlSession.commit();
sqlSession.close();
}
System.out.println("查询的结果:"+dhy);
}
}
注意:
配置的时候,参数类型不用写
sql语句不要写分号
增删改不用写返回值类型,增删改是返回影响多少行,mybaits自动封装,如果接口方法里面返回值写的是(int,long),那么自动封装为对应的类型返回。 如果是boolen,那么影响0行封装为false,否则为true
#{属性名}:从传入的参数对象中取出对应属性的值
注意:如果没有设置自动提交,那么需要手动提交,这样才能正确完成对数据库的增删改查操作
手动提交设置方式:
finally {
//手动提交
sqlSession.commit();
sqlSession.close();
}
自动提交设置方式:
SqlSession sqlSession = sqlSessionFactory.openSession(true);
小总结(注意事项)
全局配置文件
properties属性----》引入外部配置文件
jdbc.properties配置文件:
username=root
password=126433
jdbcurl=jdbc:mysql://localhost:3306/tx
dirverclass=com.mysql.jdbc.Driver
MyBaits-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>
<!--和spring的context: property-placeholder;引用外部配置文件-->
<!--
resource:从类路径下开始引用
url:引用磁盘路径或者网络路径的资源
-->
<!--classpath前缀是spring框架才有的-->
<properties resource="jdbc.properties"> </properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!--配置连接池-->
<dataSource type="POOLED">
<!--${取出配置文件中的值}-->
<property name="driver" value="${dirverclass}"/>
<property name="url" value="${jdbcurl}"/>
<property name="username" value<以上是关于MyBatis入门第一部分的主要内容,如果未能解决你的问题,请参考以下文章
Mybatis最入门---代码自动生成(generatorConfig.xml配置)
Spring boot入门:SpringBoot集成结合AdminLTE(Freemarker),利用generate自动生成代码,利用DataTable和PageHelper进行分页显示(示例(代码