MyBatis学习笔记——04MyBatis入门程序

MyBatis学习笔记——04MyBatis入门程序

要想学好mybatis必须掌握好其入门程序掌握好它的增,删,改,查

完整学习路线:https://blog.csdn.net/qq_40163148/article/details/89668242

代码里注释解释巨细无比不懂请留言

1.首先我们来了解一下mybatis的入门程序的架构

在这里插入图片描述
1.两个jar包
在这里插入图片描述
mybaits核心包
在这里插入图片描述
mysql驱动包
2.config目录
在这里插入图片描述
**sqlmap:用来保存mapper文件 如User.xml(userdb映射文件)

<?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命名空间,作用是对sql进行分类化管理,理解sql隔离
 注意:使用mybatis代理方法开发,namespace具有重要作用
  -->
<mapper namespace="test">
 <!-- 在映射文件中配置很多sql语句 -->
 <!-- 需求:通过id查找用户表的记录 -->
 <!-- 通过select执行数据库查询 -->
 <!-- id:标识 映射文件中的sql
 将sql语句封装到mappedStatement对象中,所以将id成为satement的id
parameterType 指定输入的参数类型 这里id为int
resultType 指定输出的java对象类型,只把一条结果封装成指定java对象
#{}表示一个占位符
#{id}:id表示接收输入的参数,参数名称就是id,如果输入参数是简单类型,#{}中的名称可以是任意的,可以是value或其他名称
#{}通过OGNL读取pojo属性值
  -->
 <select id="findUserById"  parameterType="int" resultType="com.lipengge.mybatis.bean.User">
      SELECT * FROM USERDB WHERE id = #{id}
 </select>
 <!-- ${}可以原样拼接sql语句,但是这样做会引起sql注入的问题
      ${}接收简单类型,${}的名称只能使用value
  -->
 <select id="findUserByName" parameterType="java.lang.String" resultType="com.lipengge.mybatis.bean.User">
      SELECT * FROM USERDB WHERE user_name LIKE '%${value}%'
 </select>
 <!-- 插入用户 -->
 <!--  parameterType 输入参数类型
 #{}指定pojo中的属性名,接收到pojo对象的属性值,mybatis通过ognl来获取属性值
 -->
 <insert id="insertUserById"  parameterType="com.lipengge.mybatis.bean.User" >
  <!-- 
  自增主键返回:mysql自增主键是在insert之前生成一个自增主键
  通过mysql自增函数获取刚插入到记录的自增主键LAST_INSERT_ID()
  -->
 <!-- 
   SELECT LAST_INSERT_ID() 得到刚插入的主键值,只适用于主键自增
   keyProperty 要获取的自增主键的属性名
   resultType返回的主键的结果类型
   order SELECT LAST_INSERT_ID()相对于insert的执行顺序
  -->
 <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
 SELECT LAST_INSERT_ID()
 </selectKey>
 insert into userdb(user_name,user_sex,user_age) values(#{user_name},#{user_sex},#{user_age})
 </insert>
 <!-- 
 非自增主键返回:
 使用mysql的uuid函数生成主键,需要修改表中id字段类型为string,长度设置成35位
 执行思路:
 先通过uuid查询到主键,将主键输入到sql语句中去
 执行uuid()语句相对于insert语句之前执行
先将生成的uuid值设置到user对象中去然后插入时取出通过uuid插入
  -->
<!-- <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.string">
 SELECT UUID()
 </selectKey>
 insert into userdb(id,user_name,user_sex,user_age) values(#{id},#{user_name},#{user_sex},#{user_age})
 </insert>-->
<!-- 删除用户 -->
<delete id="deleteUserById" parameterType="java.lang.Integer">
delete from userdb where id=#{id}
</delete>
<!-- 更新用户 -->
<update id="updateUserById" parameterType="com.lipengge.mybatis.bean.User">
     update userdb set user_name=#{user_name},user_sex=#{user_sex},user_age=#{user_age} where id=#{id}
</update>
</mapper>

log4j.properties mybatis日志文件

# Global logging configuration
#我们调试时一定要用DEBUG,发布后可用INFO,ERROR等(properties文件不支持中文这是我写博客加的)
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

SqlMapConfig.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">
 <!-- 和spring整合后environments配置将作废 -->
<configuration>
	 <environments default="development">
	 <environment id="development">
	 <!-- 使用jdbc事务管理器,事务由mybatis实现 -->
	 <transactionManager type="JDBC"/>
	 <!-- 数据库连接池 -->
	 <dataSource type="POOLED">
	 <property name="driver" value="com.mysql.jdbc.Driver"/>
	 <property name="url" value="jdbc:mysql://localhost:3306/dbpritise"/>
	 <property name="username" value="root"/>
	 <property name="password" value="LPG199812"/>
	 </dataSource>
	 </environment>
	 </environments>
	 <!--配置映射文件-->
	 <mappers>
	 <mapper resource="sqlmap/User.xml"/>
    </mappers>
</configuration>

3.src目录
在这里插入图片描述
**com.lipengge.mybatis.bean 保存pojo用于输出(输入)映射的pojo类如User

package com.lipengge.mybatis.bean;

public class User {
     private int id;
     private String user_name;
     private String user_sex;
     private int user_age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUser_name() {
		return user_name;
	}
	public void setUser_name(String user_name) {
		this.user_name = user_name;
	}
	public String getUser_sex() {
		return user_sex;
	}
	public void setUser_sex(String user_sex) {
		this.user_sex = user_sex;
	}
	public int getUser_age() {
		return user_age;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", user_name=" + user_name + ", user_sex=" + user_sex + ", user_age=" + user_age
				+ "]";
	}
	public void setUser_age(int user_age) {
		this.user_age = user_age;
	}
}

com.lipengge.mybatis.dao 以后dao开发保留‘
com.lipengge.mybatis.first保存测试类如TestClass.java这里使用了JUnit调试

package com.lipengge.mybatis.first;

import java.io.IOException;
import java.io.InputStream;
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.junit.Test;

import com.lipengge.mybatis.bean.User;

public class TestClass {
@Test
  public void testFindUserById() throws IOException{
	//mybatis配置文件
	 String resource="SqlMapConfig.xml";
	 //得到配置文件流
	 InputStream inputStream = Resources.getResourceAsStream(resource);
	//1.创建会话工厂,传入mybatis配置文件
	SqlSessionFactory sqlsessionfactory=new SqlSessionFactoryBuilder().build(inputStream);
	//2.通过工场得到SqlSession
	SqlSession sqlsession=sqlsessionfactory.openSession();
	//3.通过SqlSession操作数据库
	User selectOne = sqlsession.selectOne("test.findUserById",4);
	System.out.println(selectOne);
	sqlsession.close();
	}
@Test
public void testFindUserByName() throws IOException{
	
	String resource="SqlMapConfig.xml";
	//配置文件流
	InputStream inputStream = Resources.getResourceAsStream(resource);
	//1.创建会话工厂,导入mybatis配置文件
	SqlSessionFactory sqlsessionfactory=new SqlSessionFactoryBuilder().build(inputStream);
	//2.创建sqlSession
	SqlSession openSession = sqlsessionfactory.openSession();
	//3.操作数据库
	List<User> selectList = openSession.selectList("test.findUserByName","振川");
	System.out.println(selectList);
	openSession.close();

}
@Test
public void insertUserById() throws IOException{
	User user=new User();
	user.setUser_name("尼古拉斯赵四");
	user.setUser_age(18);
	user.setUser_sex("男");
	String resource="SqlMapConfig.xml";
	InputStream inputstream = Resources.getResourceAsStream(resource);
	//1.创建SqlSessionFactory
	SqlSessionFactory sqlsessionfactory=new SqlSessionFactoryBuilder().build(inputstream);
	//2.创建SqlSession
	SqlSession openSession = sqlsessionfactory.openSession();
	//3.操作数据库
	openSession.insert("test.insertUserById",user);
	openSession.commit();//提交
	System.out.println(user.getId());
	openSession.close();
  }
@Test
public void deleteUserById() throws IOException{
	String resource="SqlMapConfig.xml";
	InputStream inputstream = Resources.getResourceAsStream(resource);
	//1.创建SqlSessionFactory
	SqlSessionFactory sqlsessionfactory=new SqlSessionFactoryBuilder().build(inputstream);
	//2.创建SqlSession
	SqlSession openSession = sqlsessionfactory.openSession();
	//3.操作数据库
	openSession.delete("test.deleteUserById",15);
	openSession.commit();//提交
	openSession.close();
}
@Test
public void updateUserById() throws IOException{
	User user=new User();
	user.setId(16);
	user.setUser_name("嘎嘎嘎嘎");
	String resource="SqlMapConfig.xml";
	InputStream inputstream = Resources.getResourceAsStream(resource);
	//1.创建SqlSessionFactory
	SqlSessionFactory sqlsessionfactory=new SqlSessionFactoryBuilder().build(inputstream);
	//2.创建SqlSession
	SqlSession openSession = sqlsessionfactory.openSession();
	//3.操作数据库
	openSession.insert("test.updateUserById",user);
	openSession.commit();//提交
	openSession.close();
}
}

2.mybatis的增删改查

一般查询

映射文件(User.xml)

在这里插入图片描述

测试程序(TestClass.java)

在这里插入图片描述

模糊查询

映射文件

在这里插入图片描述

测试程序

在这里插入图片描述

主键自增插入

映射文件

在这里插入图片描述

测试程序

在这里插入图片描述

非主键自增插入

映射文件

在这里插入图片描述

测试程序同上

删除

映射文件

在这里插入图片描述

测试程序

在这里插入图片描述

映射文件

在这里插入图片描述

测试程序

在这里插入图片描述
最后附上userdb表结构
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值