Mybatis学习笔记(idea)
Mybatis(ieda)
- 一款优秀的持久层框架
- 官网:Mybatis-3官网
- Maven仓库:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
- 数据库:
CREATE TABLE `user`(
`id` INT(20) NOT NULL PRIMARY KEY,
`name` VARCHAR(30) DEFAULT NULL,
`pwd` VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB CHARSET=utf8;
INSERT INTO `user`(`id`,`name`,`pwd`) VALUES
(1,'lix','123456'),
(2,'admin','123456'),
(3,'root','123456')
- 导入依赖
<!--导入依赖 -->
<dependencies>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
- 编写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>
<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/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
- 获得sqlsessionfactory
private static SqlSessionFactory sqlSessionFactory;
static{
try {
//获得sqlsessionFactory
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
- Mapper.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">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
-
报错:
Could not find resource org/mybatis/example/mybatis-config.xml
-
解决:纯配置文件路径错误,检查路径即可
-
报错:
org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource-
解决:在pom.xml中加入以下配置
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>- log4j配置文件
-
#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file
#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold = Debug
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = [%c]-%m%n
#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = ./log/lix.log
log4j.appender.file.MaxFileSize = 10mb
log4j.appender.file.Threshold = DEBUG
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = [%p][%d{yy-mm-dd}][%c]%m%n
#日志输出级别
log4j.logger.org.mybatis = DEBUG
log4j.logger.java.sql = DEBUG
log4j.logger.java.sql.Statement = DEBUG
log4j.logger.java.sql.ResultSet = DEBUG
log4j.logger.java.sql.PreparedStatement = DEBUG
二.注解CRUD
package com.lix.dao;
import com.lix.pojo.User;
import org.apache.ibatis.annotations.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* program mybatis-01
* @author lix
*/
public interface UserMapper {
/**
* getUsers
* @return
*/
@Select("select * from user")
List<User> getUsers();
/**
*
* getUserById
* @param id
* @param name
* @return
* 方法存在多个参数,
*/
@Select("select * from user where id=#{id}")
User getUserById(@Param("id") int id, @Param("name") String name);
/**
* addUser
* @param map
* @return
*/
@Insert("insert into user(id,name,pwd) values(#{id},#{name},#{pwd})")
int addUser(Map<String,Object> map);
/**
* updateUser
* @param map
* @return
*/
@Update("update user set name = #{name},pwd=#{pwd} where id = #{id}")
int updateUser(Map<String,Object> map);
/**
* deleteUse
* @param id
* @return
*/
@Delete("delete from user where id = #{id}")
int deleteUse(@Param("id") int id);
}
【注意:我们必须要把核心配置类(UserMapper.java)绑定到核心配置文件中(mybatis-config.xml)】
-
关于@Param()注解
- 基本类型的参数或者String类型,需要加
- 引用类型不需要加
- 如果只有一个基本类型的话,可以忽略,建议加
- 我们在SQL中引用的就是我们这里的的@Param()中设定的属性名
-
{} 可以很大程度的防止sql注入 ${}
-
Lombok
-
Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.-
Project Lombok是一个java库,它可以自动插入到你的编辑器和构建工具中,为您的java注入新的活力。
不要再编写其他getter或equals方法,有了一个注释,类就有了功能齐全的构建器、自动化日志变量等等。
-
-
package com.lix.dao; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * program mybatis-02 * @author lix * description 加在类上所有属性都加,加在属性上,只有属性加 */ @Data @AllArgsConstructor @NoArgsConstructor public class User { private int id; private String name; private String pwd; }
-
-
多对一,一对多处理
4.1 多对一

4.2 一对多

- 多个学生,对应一个老师
- 学生:关联--多个学生关联一个老师(多对一)
- 老师:集合--一个老师有很多学生(一对多)
4.1、按照查询嵌套处理
<select id="getStudent" resultMap="StudentTeacher">
select * from student
</select>
<resultMap id="StudentTeacher" type="Student">
<result column="id" property="id"/>
<result column="name" property="name"/>
<!--复杂属性单独处理
对象:association
集合:collection
-->
<association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
<collection property=""/>
</resultMap>
<select id="getTeacher" resultType="Teacher">
select * from teacher where id = #{tid};
</select>
4.2、按照结果嵌套处理
<select id="getStudent2" resultMap="StudentTeacher2">
select s.id sid,s.name sname,t.name tname
from student s,teacher t
where s.id = t.id
</select>
<resultMap id="StudentTeacher2" type="Student">
<result column="sid" property="id"/>
<result column="sname" property="name"/>
<!--复杂属性单独处理
对象:association
集合:collection
-->
<association property="teacher" javaType="Teacher">
<result column="tname" property="name"/>
</association>
<collection property=""/>
</resultMap>
三.动态SQL
<select id="iii" resultType="sss">
select * from mybatis.user
<where>
<if test="title != null">
title =1
</if>
</where>
<set></set>
</select>
四.缓存
【先走二级缓存-----》再看一级缓存-------》最后在数据库中查找

本文来自博客园,作者:六爻呈乾,转载请注明原文链接:https://www.cnblogs.com/ilycq/p/13857254.html

浙公网安备 33010602011771号