mybatis入门教程(配置文件详解、增删改查、接口编程方式)

今天把mybatis基础学差不多了,总结一下。

从配置文件开始:

    mybatis一共有两种配置文件,一个叫总配置文件(下文的Config.xml),一个是映射的配置文件(user.xml),其中映射文件可以有多个。先把工程目录贴上

下面是mybatis总配置文件代码:

<?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>
	<typeAliases>
		<typeAlias alias="User" type="com.ljf.mybatis.User" />
	</typeAliases>
	<!-- 配置开发环境,可以配置多个,在具体用时再做切换 -->
	<environments default="development">
		<environment id="development">
		<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
			    <property name="url" value="jdbc:mysql://localhost:3306/struts_tutorial?useUnicode=true&useSSL=true" />
			    <property name="username" value="root" />
			    <property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>
	
	<!-- 加载映射文件 mapper -->
	<mappers>
		<mapper resource="com/ljf/mybatis/User.xml" />  
	</mappers>  
	
</configuration>

其中<typeAliases>标签的作用就是把很长的类文件目录简化,上面就可以直接有User代替com.ljf.mybatis.User,后面在有需要这个User直接用就行,比如后面的返回值类型resultType=“User”,就是简化后的,很方便,<environments中的都是数据库基本配置文件,不需要再多讲,根据自己的数据库进行配置,<mappers>中的是映射文件,其中可以有多个,并列就行,并且切记,第一一定要完整的路径名,第二不能用“.”而是用“/”进行分隔。是不是很简单。


下面放上映射文件:

<?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.ljf.mybatis.inter.IUserOperation">
	<select id="selectUserByUsername" parameterType="String" resultType="User">
		select * from `user` where username = #{username}
    </select>
    
    <insert id="insert" parameterType="User">
    	insert into user(username,password) values(#{username},#{password})
    </insert>
    
    <update id="update" parameterType="User">
    	update user set password=#{password}
    	where username=#{username}
    </update>
    
    <delete id="delete" parameterType="String">
    	delete from user
    	where username=#{username};
    </delete>
</mapper>

我分别进行了更删改查的简单示范。下面详细进行说明

    mapper命名空间可以随便起名,只要不重复就行,我这里对应了接口的路径,作用一会再说,先说配置文件:

    增删该查操作分别对应<select、<insert、<update、<delete 。    parameterType 是你要传入参数的类型,比如id等,也可以是list,map,User等。
    resultType   对应查询返回的类型,同上。
    SQL语句就不用说太多了,就一点#{},相当于SQL中的id=?的意思。


下面说一下面向接口的编程方式:
    首先建一个包,写一个接口,对应四个方法:

package com.ljf.mybatis.inter;

import com.ljf.mybatis.User;

public interface IUserOperation {
	
	public User selectUserByUsername(String username);
	
	public void insert(User user);
	
	public void update(User user);
	
	public void delete(String username);
}

有没有发现什么?我来总结以下相同点:

1.接口文件路径和User配置文件的mapper 的namespace相同;

2.接口中的方法名和User.xml中的方法名(也就是id)相同;

3.接口方法的返回值和参数类型与User.xml的parameterType和resultType相同;


这几点掌握你就会使用接口编程了,第一点很重要,其实三点错一个都不行的。

下面附上测试代码:

package com.ljf.test;

import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Test;

import com.ljf.mybatis.User;
import com.ljf.mybatis.inter.IUserOperation;

class test {
	
	@Test
	void testSELECT() {
		String resource = "/Config.xml";
		InputStream inputStream = this.getClass().getResourceAsStream(resource);
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession sqlSession = sessionFactory.openSession(); 
		
		try {
			IUserOperation userOperation= sqlSession.getMapper(IUserOperation.class);
			User user = userOperation.selectUserByUsername("James");
			System.out.println(user.getUsername());
			System.out.println(user.getPassword());
			
		}catch(Exception e) {
			e.printStackTrace();
		}
	
	}

	@Test
	void testINSERT() {
		String resource = "/Config.xml";           //定位核心配置文件
        InputStream inputStream = this.getClass().getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession = sqlSessionFactory.openSession();  
        
        User user = new User();
        user.setUsername("wbd");
        user.setPassword("12778");
        
        IUserOperation userOperation= sqlSession.getMapper(IUserOperation.class);
        userOperation.insert(user);
        sqlSession.commit(); 
	}
	
	@Test
	void testUPDATE() {
		String resource = "/Config.xml";           //定位核心配置文件
        InputStream inputStream = this.getClass().getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();  
        
        IUserOperation userOperation= sqlSession.getMapper(IUserOperation.class);
        
        User user = userOperation.selectUserByUsername("ljf");
        user.setPassword("778899");
        userOperation.update(user);
        sqlSession.commit(); 
	}

	@Test
	void testDELETE() {
		String resource = "/Config.xml";           //定位核心配置文件
        InputStream inputStream = this.getClass().getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();  
        
        IUserOperation userOperation = sqlSession.getMapper(IUserOperation.class);
        
        userOperation.delete("ljf");
        sqlSession.commit(); 
	}
}

我分别对四个方法进行测试,全都能运行

IUserOperation userOperation = sqlSession.getMapper(IUserOperation.class);

这一步是面向接口编程特殊的一步,经过上面直接可以通过接口调用对应的方法执行sql语句了。

以上就是我的总结,希望能帮到你们。有问题可以一起讨论。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值