Mybatis快速入门

Mybatis是什么?

  • 在使用mybatis之前,需要先知道mybatis是什么?MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。(摘自w3school)。简单来说,mybatis就是用来简化连接、操作数据库操作的,以往我们用java连接数据库需要些大量的代码,使用mybatis只要配置好就可以使用。

Mybatis环境搭建方法

第一步:

  • 使用mybatis框架只要导入mybatis核心jar包就可以使用:mybatis-xxx.jar(选择版本自行下载);
  • 如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version></dependency>
  • 因为是对数据库进行操作,需要导入相应的数据库连接的jar包,这里使用的是mysql。Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到jar库文件,然后在对应的项目中导入该库文件。
  • 如果需要日志,还可导入相应的日志包,如log4j,slf4j等,在mybatis的配置文件中开启使用。

第二步:

  • 创建实体类com.xxx.pojo.People
package com.czxy.pojo;

public class People {
	private int id;
	private String name;
	private int age;
	
	public People() {
		super();
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "People [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
	
	
}

  • 编写mybatis全局配置文件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">
  <!-- 文件头,可在mybatis官网获得 -->
  <configuration>
  		<!-- 这里写详细配置,配置顺序不可以互换,将鼠标放置到  <configuration>上方查看配置顺序-->
  </configuration>
  • 数据库环境配置:
	<!-- 下面的default名随便起 -->
	<!-- 取值default 引用environmen的id,当前所使用的环境 -->
<environments default="default">
		<!-- 声明可以使用的环境 -->
		<environment id="default">
			<!-- JDBC事物类型默认为自动提交,在java代码中设置 conn.setAutoCommit(false)则为不自动提交 -->
			<!-- 使用原生JDBC事务 -->
			<transactionManager type="JDBC"></transactionManager>
			<!-- 使用数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/数据库名称" />
				<property name="username" value="用户名" />
				<property name="password" value="密码" />
			</dataSource>
		</environment>
	</environments>
  • 映射器配置,指明对数据库操作的xml配置所在的包:
<mappers>
		<!-- 写全路径 -->
		<mapper resource="包名/xxx.xml" />
		<!-- 如: -->
		<mapper resource="com/xxx/mapper/PeopleMapper.xml" />
</mappers>
  • 以上是基础配置,在整合ssm框架时不需要写
  • 还可以添加其他配置,方便操作。
    • 别名配置:(别名配置有三种:
      • 一、系统内置别名:把类名全小写,查看文档了解;
      • 二、给某个类起别名:添加标签给常用的属性起简短的别名
      • 三、直接给某个包下所有类起别名,别名是类名 )
      • 如:
<typeAliases>
<!-- 给某包下某类起别名: -->
        <typeAlias type="com.xxx.pojo.People" alias="peo"/>
<!-- 给某包下所有类起别名,别名是类名: -->
        <package name="com.xxx.pojo"/>
</typeAliases>
  • setting设置(如:开启日志,其余的设置在官网查看):
<settings>
        <!-- mybatis开始log4j支持的功能 -->
        <setting name="logImpl" value="LOG4J"/>
</settings>

以上是常用的一些设置,其余的可以在mybatis官网查看。


第三步:

  • 在com.xxx.mapper包下新建 实体类名+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">
	  	<!-- 文件头,可在mybatis官网获得 -->
	    <!-- 可以将namespace理解为:包名+类名,但可以随便起名,不同体现在方法上 -->
	  <mapper namespace="a.b">
	    		<!-- 这里写数据库相关操作,如:select,delete等 -->
	    		
	  </mapper>

  • select标签用法:
    • id为方法名
    • parameterType:定义参数类型
    • resultType:定义返回值类型
    • 如果方法返回值是list,在resultType中写list的泛型,因为
    • mybatis对jdbc封装,一行一行读取数据
    • 在这里体现使用别名不使用别名的区别(使用别名很简单)
	<mapper namespace="a.b">
    <!-- java方法中:public void selById(int id) -->
    <!-- 不使用别名 -->
   <select id="selById" resultType="com.xxx.pojo.People" parameterType="int">
       select * from people where id=#{0}
       <!-- =#{0}代表:selById(int id)的第一个参数,下标从0开始 -->
   </select>
   <select id="test" resultType="com.xxx.pojo.People" parameterType="int">
       <![CDATA[select * from people where id<#{0}]]>
   </select>

   <!-- 使用别名 -->
   <select id="page" resultType="peo" parameterType="map">
       select * from people limit #{pageStart},#{pageSize}
   </select>
	<select id="page1" resultType="People" parameterType="map">
		select * from people limit #{pageStart},#{pageSize}
	</select>
   
	<insert id="ins" parameterType="People">
	    insert into people values(default,#{name},#{age})
	</insertt>
   
</mapper>

第四步:

  • 编写测试类,将测试类都放在com.xxx.test包下
	public class test {
	public static void main(String[] args) throws IOException {
		InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession session = factory.openSession();
<!-- session的第一种方式,查找一个 -->
//		People p = session.selectOne("a.b.selById",1);
//		People p1 = session.selectOne("a.b.test",2);
//		System.out.println(p.toString());
//		System.out.println(p1.toString());
		
		
<!-- session的第二种方式,查找返回list -->
//		int pageSize = 2;
//		int pageNumber = 2;
//		
//		Map<String, Object> map = new HashMap<>();
//		map.put("pageSize", pageSize);
//		map.put("pageStart", pageSize*(pageNumber-1));
//		
//		List<People> p2 = session.selectList("a.b.page",map);
//		System.out.println(p2);
		
		
		People p = new People();
		p.setName("新增name");
		p.setAge(18);
		int index = session.insert("a.b.ins", p);
		if(index > 0) {
			System.out.println("成功");
		}else {
			System.out.println("失败");
		}
		session.commit();
		session.close();
	}
	
}

以上是mybatis的简单实现步骤


parameterType属性

  • 在XXXMapper.xml中等标签的parameterType可以控制参数类型,参数由外面提供
  • 在Mapper.xml中通过#{0}获取参数
    • 使用索引,从0开始,第一个参数
    • 也可以使用#{param1},第一个参数
    • 如果只有一个参数,mubatis对#{基本数据类型或String}里面的内容没有要求,只要写内容即可
    • 如果参数是对象#{属性名}
    • 如果参数是map写成#{key}
    • Map或对象可以传多个参数

#{}和${}的区别

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

  • ${}字符串拼接,不适用“?”,默认找${内容的get或set方法},如果写数字,就是一个数字;

  • 如果在xml文件中出现“<”、“>”,双引号 等特殊字符时可以使用XML文件转义标签(XML自身的)

    • <![CDATA[内容]]>,如:
<select id="test" resultType="com.czxy.pojo.People" parameterType="int">
       <! [CDATA [ select * from people where id < #{0} ] ]>
   </select>

mybatis实现mysql分页

  • 方法:select * from people limit 1, 2;表示:查询从第二行开始
    (1下标代表第二行),往后查两行,包括这一行本身

    • 占位符?不允许在关键字前后进行数学运算,需要在代码中计算完成后传递到mapper.xml中
    • 在java代码中计算
		int pageSize = 2;
		int pageNumber = 2;
		Map<String, Object> map = new HashMap<>();
		map.put("pageSize", pageSize);
		map.put("pageStart", pageSize*(pageNumber-1));
		
		List<People> p2 = session.selectList("a.b.page",map);
		System.out.println(p2);
  • 在mapper.xml中的代码:
	<select id="page" resultType="com.xxx.pojo.People" parameterType="map">
       select * from people limit #{pageStart},#{pageSize}
   </select>

MyBatis接口绑定方案和多参数传递

  • 作用:实现创建一个接口后把mapper.xml由mybatis生成接口的实现类,通过调用接口对象就可以获取mapper.xml中编写的sql。
  • mybatis和spring整合时使用的是这个方案
  • 实现步骤:
    • 创建一个接口,接口和mapper文件在同一个包下
    • 接口包名和接口名(接口全路径)要与mapper.xml的namespace相同,接下来mybatis自己操作
    • 接口中方法名和mapper.xml标签的id属性相同;
  • 在mybatis.xml中使用进行扫描接口和mapper.xml;
	<mappers>
        	<package name="com.xxx.mapper"/>
	</mappers>
  • 代码实现步骤:
    • 新建PeopleMapper接口类
public interface LogMapper {
	List<People> selAll();
	/**
	 * mybatis把参数转换为map,其中@Param("key") 参数变量为"value"
	 * @param pageStart
	 * @param pageSize
	 * @return
	 */
	List<People> selByPage(@Param("pageSize") String pageSize, @Param("pageStart") String pageStart);
}
    • 测试
public static void main(String[] args) throws IOException {
		InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
		// 使用工厂类
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession session = factory.openSession();
		
		
//		PeopleMapper peopleMapper = session.getMapper(PeopleMapper.class);
//		List<People> list = peopleMapper.selAll();
//		for(People people : list) {
//			System.out.println(people .toString());
//		}
		
		PeopleMapper peopleMapper = session.getMapper(PeopleMapper.class);
		int pageSize = 2;
		int pageNumber = 2;
		Map<String, Object> map = new HashMap<>();
		map.put("pageSize", pageSize);
		map.put("pageStart", pageSize*(pageNumber-1));
		
		List<People> p2 = session.selectList("a.b.page",map);
		System.out.println(p2);

	}

有兴趣的伙伴可以在mybatis官网进一步进行学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值