ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Mybatis对数据库的基本操作

2022-01-22 00:02:53  阅读:177  来源: 互联网

标签:name gender 数据库 email public Mybatis 基本操作 id String


通过XML配置文件连接到数据库以及配置执行SQL语句的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/mybatis" />
				<property name="username" value="root" />
				<property name="password" value="20001101pyj" />
			</dataSource>
		</environment>
	</environments>

	<mappers>
		<mapper resource="EmployeeMapper.xml" />
		<mapper resource="EmployeeMapperPlus.xml" />
	</mappers>
</configuration>

<mapper>标签中的XML文件是写SQL语句的

通过接口的方式创建操作数据库的规范

public interface EmployeeMapper {
	public Employee getEmpById(int id);
	
	public List<Employee> getEmpByNameLike(@Param("name")String name);
	
	public void addEmp(Employee emp);
	
	public void insert(@Param("lastName")String lastName,@Param("email")String         
    email,@Param("gender")String gender);
	
	public void update(int id,String lastName,String gender,String email);
	
	public void deleteById(int id);
}

接口对应的XML文件

namespace="com.pyj.mybatis.dao.EmployeeMapper"是与对应的接口建立联系

<?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.pyj.mybatis.dao.EmployeeMapper">
	<select id="getEmpById"
		resultType="com.pyj.mybatis.bean.Employee">
		select id,last_name lastName,gender,email from tbl_employee where id = #{id}
	</select>
	
	<select id="getEmpByNameLike" resultType="com.pyj.mybatis.bean.Employee">
		select id,last_name lastName,gender,email from tbl_employee where last_name like #{name}
	</select>
	
	<insert id="insert"
		parameterType="com.pyj.mybatis.bean.Employee">
		insert into tbl_employee(last_name,email,gender)
		values(#{lastName},#{email},#{gender})
	</insert>
	
	<insert id="addEmp"
		parameterType="com.pyj.mybatis.bean.Employee">
		insert into tbl_employee(last_name,email,gender)
		values(#{lastName},#{email},#{gender})
	</insert>
	
	<update id="update">
		update tbl_employee
		set last_name=#{param2},gender=#{param4},email=#{param3}
		where id=#{param1}
	</update>
	
	<delete id="deleteById">
		delete from tbl_employee where id=#{id}
	</delete>
	
</mapper>

增删改查

XML文件中通过<insert>进行增添操作,其中id对应的是接口中对应的方法,parameterType是传入的类型(可写可不写)

<insert id="insert"
		parameterType="com.pyj.mybatis.bean.Employee">
		insert into tbl_employee(last_name,email,gender)
		values(#{lastName},#{email},#{gender})
	</insert>
	
	<insert id="addEmp"
		parameterType="com.pyj.mybatis.bean.Employee">
		insert into tbl_employee(last_name,email,gender)
		values(#{lastName},#{email},#{gender})
	</insert>

#{}中对应的是输入的数据

1.接口中的方法通过注解@Param("lastName")为每一个属性创建名字,好应用在#{}中。

	public void insert(@Param("lastName")String lastName,@Param("email")String         
    email,@Param("gender")String gender);

2. 接口中的方法通过传入一个具体的对象,#{}中填入对象具体的属性即可

public void addEmp(Employee emp);

除上述两种方法之外要想通过#{}赋值给SQL语句还可以根据传入值的顺序依次写入param1,param2。具体见更新方法

XML文件中通过<delete>进行删除操作

    <delete id="deleteById">
		delete from tbl_employee where id=#{id}
	</delete>

对应接口中的方法

public void deleteById(int id);

如果传入的值只有一个则#{}中可以直接写对应的变量

XML文件中通过<update>进行更新操作

    <update id="update">
		update tbl_employee
		set last_name=#{param2},gender=#{param4},email=#{param3}
		where id=#{param1}
	</update>

对应接口中的方法

public void update(int id,String lastName,String gender,String email);
	

此时既没有传入一个对象,有没有加注释,所以在#{}中写的是param

XML文件中通过<select>进行查询操作

1.查一条数据,resultType是得到的数据类型

    <select id="getEmpByid" resultType="com.pyj.mybatis.bean.Employee">
		select id,last_name lastName,gender,email from tbl_employee where id=#{name}
	</select>

对应接口中的方法

public Employee getEmpById(int id);

2.查一堆数据

    <select id="getEmpByNameLike" resultType="com.pyj.mybatis.bean.Employee">
		select id,last_name lastName,gender,email from tbl_employee where last_name like #{name}
	</select>

对应接口中的方法

public List<Employee> getEmpByNameLike(@Param("name")String name);

若一个类对象A中的属性还是一个类对象B,那么SQL语句查询到的数据只能是B对象的属性值,并不能将查询到的对象B的数据封装到B对象中(暂时的理解:数据库中的列名与B对象没有对应关系)。此时需用resultMap标签来实现

将上面的resultType标签换成resultMap标签,同时在resultMap中对应好关系

 column代表数据库中的列名,property代表java中的类对象的名字

dept就是B类,dname就是他的一个属性

<mapper namespace="com.pyj.mybatis.dao.EmployeeMapperPlus">
	<resultMap type="com.pyj.mybatis.bean.EmployeeAndDep" id="Emp">
		<id column="id" property="id"/>
		<result column="last_name" property="lastName"/>
		<result column="email" property="email"/>
		<result column="gender" property="gender"/>
		<result column="name" property="dept.dname"/>
	</resultMap>
	
	<select id="getEmpAndDept" resultMap="Emp">
		SELECT e.`id`,e.`last_name`,e.`email`,e.`gender`,d.`name` FROM tbl_employee e,development d
		WHERE e.`d_id`=d.`id` AND e.`id`= #{id}
	</select>
</mapper>

对应接口中的方法(EmployeeAndDep就是类A)

public EmployeeAndDep getEmpAndDept(Integer id);

具体实现

首先与主的XML文件建立联系,找到所有可以执行SQL语句的XML配置文件,在此基础上创建一个工厂sqlSessionFactory用来创建执行者openSession

openSession.getMapper(EmployeeMapperPlus.class)方法是通过接口的类找到对应的接口

而执行SQL语句的XML文件在这篇文章最开始的地方通过namespace="com.pyj.mybatis.dao.EmployeeMapper"与对应的接口建立联系

mapper就是接口的实现类,通过mapper.接口中的方法就能执行SQL语句了

如果执行增删改操作可能需要提交

public void test() throws Exception {
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory =
		 new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession openSession = sqlSessionFactory.openSession();
		try {
			EmployeeMapperPlus mapper = openSession.getMapper(EmployeeMapperPlus.class);
			EmployeeAndDep ead=mapper.getEmpAndDept(1);
		}finally {
			openSession.close();
		}
	}

标签:name,gender,数据库,email,public,Mybatis,基本操作,id,String
来源: https://blog.csdn.net/PYJ1101/article/details/122629822

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有