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表结构