MyBatis的推荐写法

具体的实现步骤:
1、基础环境:MyBatis的jar包、数据库jar包、conf.xml、mapper.xml
2、不同的地方:约定的目标,省略掉statement,根据约定可直接定位到sql语句。

接口中的方法必须遵循一下的约定:
1、方法名和mapper.xml文件中标签的id值相同
2、方法的输入参数和mapper.xml文件中标签的parameterType类型一致,如果没有paramenterType,说明方法没有输入参数。
3、方法的返回值和mapper.xml文件中标签的resultType类型一致。如果没有resultType,说明没有返回值,则方法的返回值类型为void;不管结果集是student还是List,在mapper.xml标签中的resultType只写Student的全类名。
除了以上的约定,除了满足接口中的方法名和Mapper.xml中SQL标签一一对应,还需要满足namespace的值就是接口的全类名。

匹配的过程:
1、根据接口名找到mapper.xml文件(根据namespace=接口的全类名)
2、根据接口的方法名找到mapper.xml文件中的SQL标签(方法名=SQL标签的id值)
通过以上两点就可保证:当我们调用接口中的方法时,程序能自动定位到某一个Mapper.xml文件中的sql标签。
通常将SQL映射文件(mapper.xml)和接口放在同一个包中(注意修改conf.xml中加载mapper.xml文件的路径)

通过以上的约定,即可以通过接口的方法定位到sql语句。
在执行的时候

StudentMapper studentMapper = session.getMapper(StudentMapper.class);
studentMapper.方法名;

通过session对象获取接口,再调用该接口中的方法,程序会自动执行该方法对应的SQL。

优化
1、可以将配置信息单独放在db.properties文件中,然后再动态引入
2、MyBatis设置全局参数,但一般不应修改
在conf.xml中设置

	<settings>
 		<setting name="cacheEnabled" value="false"/>
 	</settings>

3、设置别名,在conf.xml文件中进行设置
a、设置单个别名
b、批量设置别名

	<typeAliases>
 		<!-- 单个别名,别名忽略大小写 -->
 		<!--  <typeAlias type="org.yao.entity.Student" alias="student"/>-->
 		<!-- 批量设置别名,将包中的所有类都设置别名,别名就是类名 -->
 		<package name="org.yao.entity"/>
 	</typeAliases>

以下是代码实现
数据库student表
在这里插入图片描述
Student实体类

private int stuNo;
	private String stuName;
	private int stuAge;
	private String graName;

db.properties文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/yq
username=数据库用户名
password=数据库密码

conf.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>
 
 	<!-- 将数据库的信息引进来 -->
 	<properties resource="db.properties"/>
 	
 	<!--  全局参数在这里配置,但是一般不要配置
 	<settings>
 		<setting name="cacheEnabled" value="false"/>
 	</settings>
 	-->
 	
 	<!-- 设置单个/多个别名 -->
 	<typeAliases>
 		<!-- 单个别名,别名忽略大小写 -->
 		<!--  <typeAlias type="org.yao.entity.Student" alias="student"/>-->
 		<!-- 批量设置别名,将包中的所有类都设置别名,别名就是类名 -->
 		<package name="org.yao.entity"/>
 	</typeAliases>
 	
    <environments default="development">
    	<!-- 开发环境 -->
    	<environment id="development">   		
           <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                <!-- 配置数据库信息 -->
                   <property name="driver" value="${driver}"/>
                   <property name="url" value="${url}"/>
                   <property name="username" value="${username}"/>
                   <property name="password" value="${password}"/>      
                </dataSource>    
       </environment>  
       
      
    </environments>  
	<mappers>    
		<!-- 加载映射文件 -->
		<mapper resource="org/yao/mapper/StudentMapper.xml"/>  
	</mappers> 
</configuration>

StudentMapper.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是该映射文件的唯一标识符 -->
<!-- namespace和接口的全类名相同,通过接口的全类名来定义到映射文件,标签的id值和接口的方法名相同,通过接口的方法名来找到对应的标签 -->
<mapper namespace="org.yao.mapper.StudentMapper">
	<!-- parameterType是输入参数的类型 
		resultType是返回结果值类型
	-->
	<select id="queryStudentById" parameterType="int" resultType="student">
		select * from student1 where stuno = #{stuno}
	</select>

	<!-- MyBatis约定输入参数和输出参数在形式上只能有一个 -->
	<insert id="addStudent" parameterType="student">
		insert into student1(stuno,stuname,stuage,graname) values(#{stuNo},#{stuName},#{stuAge},#{graName})
	</insert>
	
	<delete id="deleteStudentByStuno" parameterType="int">
		delete from student1 where stuno = #{stuno}
	</delete>
	
	<update id="updateStudentByStuno" parameterType="student">
		update student1 set stuname=#{stuName},stuage=#{stuAge},graname=#{graName} where stuno=#{stuNo}
	</update>
	
	<!-- 不管是否返回一个集合,返回值类型都是student -->
	<select id="queryAllStudents" resultType="student">
		select * from student1
	</select>
	
</mapper>

StudentMapper.java这是接口文件

package org.yao.mapper;

import java.util.List;

import org.yao.entity.Student;

//a操作MyBatis的接口
public interface StudentMapper {

	/*
	 * 1.方法名和mapper.xml文件中标签的id值相同
	 * 2.方法的输入参数和mapper.xml文件中标签的parameterType类型一致
	 * 3.方法的返回值和mapper.xml文件中标签的resultType类型一致
	 */
	Student queryStudentById(int stuno);
	
	void addStudent(Student student);
	
	void deleteStudentByStuno(int stuno);
	
	void updateStudentByStuno(Student student);
	
	List<Student> queryAllStudents();
}

测试类

package org.yao.test;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.yao.entity.Student;
import org.yao.mapper.StudentMapper;

public class Test {

	// 查询单个学生
	public static void queryStudentByStuno() throws IOException {
		Reader reader = Resources.getResourceAsReader("conf.xml");

		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactory.openSession();
		
		StudentMapper studentMapper = session.getMapper(StudentMapper.class);
		Student student = studentMapper.queryStudentById(1);
		
		System.out.println(student);
		session.close();
	}

	// 查询全部学生
	public static void queryAllStudent() throws IOException {
		Reader reader = Resources.getResourceAsReader("conf.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactory.openSession();
		StudentMapper studentMapper = session.getMapper(StudentMapper.class);
		List<Student> students = studentMapper.queryAllStudents();
		System.out.println(students);
		session.close();
	}

	// 增加学生
	public static void insertStudent() throws IOException {
		Reader reader = Resources.getResourceAsReader("conf.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactory.openSession();
		StudentMapper studentMapper = session.getMapper(StudentMapper.class);
		Student student = new Student(3, "ww", 25, "g2");
		studentMapper.addStudent(student);
		// 注意要提交啊
		session.commit();
		System.out.println("增加成功");
		session.close();
	}

	// 删除学生
	public static void deleteStudent() throws IOException {
		Reader reader = Resources.getResourceAsReader("conf.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactory.openSession();
		StudentMapper studentMapper = session.getMapper(StudentMapper.class);
		studentMapper.deleteStudentByStuno(3);
		// 注意要提交啊
		session.commit();
		System.out.println("删除成功");
		session.close();
	}
	
	// 修改学生
		public static void updateStudent() throws IOException {
			Reader reader = Resources.getResourceAsReader("conf.xml");
			SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
			SqlSession session = sessionFactory.openSession();
			Student student = new Student();
			student.setStuNo(2);
			student.setStuName("lds");
			student.setStuAge(44);
			student.setGraName("g1");
			StudentMapper studentMapper = session.getMapper(StudentMapper.class);
			studentMapper.updateStudentByStuno(student);
			// 注意要提交啊
			session.commit();
			System.out.println("修改成功");
			session.close();
		}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis提供了两种方式来进行模糊查询的like写法,分别是使用通配符和使用动态SQL。 1. 使用通配符: 在使用通配符的方式时,可以在查询语句中使用 "%" 字符来表示任意字符的匹配。 示例代码如下: ```java @Select("SELECT * FROM your_table WHERE your_column LIKE CONCAT('%', #{keyword}, '%')") List<YourEntity> findByKeyword(@Param("keyword") String keyword); ``` 上述示例中,`your_table`是数据库表名,`your_column`是要查询的字段名,`your_entity`是实体类名。通过`#{keyword}`占位符将参数传入,并使用CONCAT函数将 "%" 字符拼接到关键字的前后,实现模糊查询。 2. 使用动态SQL: 使用动态SQL的方式可以根据不同的情况动态生成SQL语句。可以根据输入的关键字是否为空来决定是否添加模糊查询条件。 示例代码如下: ```xml <select id="findByKeyword" parameterType="String" resultType="YourEntity"> SELECT * FROM your_table <where> <if test="keyword != null and keyword != ''"> AND your_column LIKE CONCAT('%', #{keyword}, '%') </if> </where> </select> ``` 上述示例中,`your_table`是数据库表名,`your_column`是要查询的字段名,`your_entity`是实体类名。通过`<if>`标签判断关键字是否为空,如果不为空则添加模糊查询条件。 以上就是使用MyBatis进行模糊查询的两种常见写法。根据具体的需求和项目情况,可以选择适合的方式来实现模糊查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值