框架
1.1三层架构
软件开发常用的架构是三层架构,一般包括三层:
-
持久层:主要完成数据库相关操作,数据库的增删改查,
因为数据库访问的对象一般称为Data Access Object(简称DAO),所以有人把持久层叫做DAO层。
-
**业务层:**主要根据功能需求完成逻辑的定义实现(最接近于需求)
因为它主要是为上层提供服务的,所以有人把业务层叫做Service层或Business层。
-
表现层:主要完成最终软件使用用户的交互,需要有界面的交互
因此,有人把表现层称之为web层或View层。
三层架构之间调用关系为:表现层调用业务层,业务层调用持久层。 各层之间必然要进行数据交互,我们一般使用java实体对象来传递数据。
1.2框架
1.21框架简介:
把重复的代码工作抽取出来,让程序员把精力专注在核心的业务代码实现上。 框架可以理解为一种套路,框架做好以后,接下来就可以按照套路做事情了。
1.2常见的框架:
- 持久层框架:专注于解决数据持久化的框架,常用的有**Mybatis,**Hibermate(冬眠)等
- 表现层框架:专注于解决于用户交互的框架.Spring Mvc , struts 2,等
- 业务层框架(全栈框架):能在各层解决方案的框架,著名的spring
二,Mybatis概述
2.1 ORM概述
ORM(object Relational Mapping)对象关系映射,是一个针对持久层的理论思想。
-
O----对象----类
-
R----关系----数据表
-
M----映射----在类和数据表之间建立的一一对应的关系(类名–>表名 属性名–>字段名
java类和表结构对应关系:一般情况下,表的字段名和Java类的属性名保持一致。
三. Mybatis入门案例
3.1创建工程,引入坐标
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itheima</groupId>
<artifactId>day_43_mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--可选坐标lOg4j是日志记录工具,
myBaits能够借助工具输出运行的日志。
方便学习和解决出现的问题。-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</build>
</project>
3.2 创建数据库、数据表、
//创建user表
CREATE TABLE user( uid INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) NOT NULL UNIQUE,
gender VARCHAR(50) ,
age VARCHAR(50),
address VARCHAR(20),
qq varchar(20) ,
email varchar(20)
);
##字段长度类型根据自己制定,和类保持一致
package domain;
import java.io.Serializable;
public class User implements Serializable {
private Integer uid;
private String username;
private String gender;
private Integer age;
private String address;
private String qq;
private String email;
public User(Integer uid, String username, String gender, Integer age, String address, String qq, String email) {
this.uid = uid;
this.username = username;
this.gender = gender;
this.age = age;
this.address = address;
this.qq = qq;
this.email = email;
}
public Integer getUid() {
return uid;
}
public String getUsername() {
return username;
}
public String getGender() {
return gender;
}
public Integer getAge() {
return age;
}
public String getAddress() {
return address;
}
public String getQq() {
return qq;
}
public String getEmail() {
return email;
}
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", username='" + username + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
", address='" + address + '\'' +
", qq='" + qq + '\'' +
", email='" + email + '\'' +
'}';
}
}
3.3配置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="ee111">
<environment id="ee111">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///ee111"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
3.31加入log4j的日志配置文件(可选的)
log4j.rootLogger=trace, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OwlWgt70-1571107720659)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571056473743.png)]
3.32编写映射文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wo1567Um-1571107720660)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571057291648.png)]
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace 必须指定,类似指定包名称-->
<mapper namespace="com.itheima">
<!--id的取值,要求文本文件要求唯一
parameterType :包存在的java类型,一般可以省略
sql语句: # 表示占位符
#{username}:获取parameterType指定类型对象的getUsername方法
-->
<insert id="addUser" parameterType="com.itheima.domain.User">
insert into current_user
(username,gender,age,address,qq,email)
values (
#{username},#{gender},#{age},#{address},#{qq},#{email}
)
</insert>
</mapper>
3.33注册映射文件到mybatis的主配置文件中
<mappers>
<mapper resource="mappers/userMapper.xml"></mapper>
</mappers>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BIAwId28-1571107720660)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571057514413.png)]
3.34测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zYMQBRti-1571107720660)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571061983895.png)]
import com.itheima.domain.User;
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.apache.log4j.lf5.util.Resource;
import org.junit.Test;
import java.io.InputStream;
public class MyBatisDemo {
@Test
public void test1() throws Exception {
User user =new User();
user.setUsername("章安");
//加载配置文件,Resource,get..Stream
InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
//创建sqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//创建SqlSessionFactor对象
SqlSessionFactory sessionFactory = builder.build(in);
//创建sqlSession对象
SqlSession sqlSession = sessionFactory.openSession();
///执行操作:insert(String,Object):String:配置文件namespace+id。Object:要保存的数据
sqlSession.insert("com.itheima.addUser",user);
sqlSession.commit();//事务提交
//释放资源
sqlSession.close();
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rilymXNT-1571107720661)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571057999336.png)]
传统编写dao实现
import com.sdfzxy.domain.User;
public interface MapperDao {
void addUser(User user);
}
编写dao实现
package com.sdfzxy.dao.impl;
import com.sdfzxy.domain.User;
import com.sdfzxy.dao.MapperDao;
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 java.io.IOException;
import java.io.InputStream;
public class MapperDaoIml implements MapperDao {
public void addUser(User user) {
try {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
SqlSession sqlSession = factory.openSession();
sqlSession.insert("com.sdfzxy.addUser", user);
sqlSession.commit();
sqlSession.close();
} catch (IOException e) {
throw new RuntimeException("加载配置文件失败", e);
}
}
}
缺点:编写dao实现类,大多数代码都是相同的,仅仅是sql语句不同
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SqygrEwJ-1571107720661)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571062183748.png)]
改进:
基于代理生成dao的实现类
package com.sdfzxy.dao;
import com.sdfzxy.domain.User;
public interface MapperDao {
void addUser(User user);
}
改进映射文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-te8JgUkO-1571107720662)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571062472383.png)]
<?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="ee111">
<environment id="ee111">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///ee111"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--注册映射文件-->
<mappers>
<mapper resource="mappers/userMapper.xml"></mapper>
</mappers>
</configuration>
编写测试类:
import com.sdfzxy.domain.User;
import com.sdfzxy.dao.MapperDao;
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 java.io.InputStream;
public class MyBatisDemo {
@Test
public void test1() throws Exception {
User user =new User();
user.setUsername("章安");
//加载配置文件,Resource,get..Stream
InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
//创建sqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//创建SqlSessionFactor对象
SqlSessionFactory sessionFactory = builder.build(in);
//创建sqlSession对象
SqlSession sqlSession = sessionFactory.openSession();
//getMapper 只需要指定接口类型,MyBatis就会自动产生该类的字节码文件
// 并返回对应的对象
MapperDao mapperDao=sqlSession.getMapper(MapperDao.class);
mapperDao.addUser(user);
sqlSession.commit();//事务提交
//释放资源
sqlSession.close();
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y7l3x63r-1571107720662)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571062732731.png)]
以后编写mybatis开发步骤
- 编写dao接口
- 编写映射文件
- 注册映射文件
MyBatis常用的类或接口
- org.apache.ibatis.io.Resources:加载配置文件
- SqlSessionFactoryBuilder:根据配置文件创建SqlSessionFactory对象的。
- SqlSessionFactory:他是一个重量级的对象(创建该对象比较消耗资源)。它是单个数据库映射关系经过编译后的内存镜像,SqlSessionFactory可以通过SqlSessionFactoryBuild对象类获取****,而SqlSessionFactoryBuild则可以从xml配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例,每一个mybatis的应用程序都以一个SqlSessionFactory对象的实例为核心,sqlSessionFactory也是线程安全的**,SqlSessionFactory一旦被创建,在应用执行期间都存在,不宜重复创建多次,推荐使用单例模式,SqlSessionFactory是创建SqlSession的工厂。
- SqlSession:SqlSession也是mybatis中的重要对象,是持久化操作的独享。类似于jdbc中的Connection,它是应用程序与持久层之间执行互操作的一个单线程对象,也是Mybatis执行持久化操作的关键对象,SqlSession对象完全包含以数据库为背景的所执行SQL操作方法。底层封装了JDBC连接,可以用SqlSession的实例对来执行被映射的SQL语句,每个线程有他自己的SqlSession实例,SqlSession的实例不能被共享,SqlSession也不是线程安全的,绝对不能将SqlSession实例的引用放在任何类型的管理范围中,使用完SqlSession之后关闭Session很重要,放在finally块来关闭它。**
工具类和测试基类
MyBatis工具类
package com.sdfzxy.util;
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 java.io.IOException;
import java.io.InputStream;
public class MyBatisUtil {
private static SqlSessionFactory factory;
static {
try {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
factory=new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
throw new RuntimeException("请检查您的配置文件",e);
}
}
public static SqlSession openSession(){
return factory.openSession();
}
}
Junit的测试基类
package com.sdfzxy.util;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
public class BaseTester {
protected SqlSession sqlSession;
@Before//在每一个测试方法前先进行执行操作
public void openSession(){
sqlSession=MyBatisUtil.openSession();
}
@After//在每一个测试方法执行后执行操作
public void closeSession(){
sqlSession.close();
}
}
测试
import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.util.BaseTester;
import org.junit.Test;
public class MapperDaoTest extends BaseTester {
@Test
public void testAddUser(){
User user =new User();
user.setUsername("李四");
MapperDao mapperDao=sqlSession.getMapper(MapperDao.class);
mapperDao.addUser(user);
sqlSession.commit();
}
}
mybatis实现修改和删除及查询功能
修改
1.编写Mapperdao接口和方法
package com.sdfzxy.dao;
import com.sdfzxy.domain.User;
public interface MapperDao {
void updateUser(User user);
}
2.修改映射文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x7XRn23o-1571107720663)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571099640605.png)]
3.编写测试类进行测试
import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.util.BaseTester;
import org.junit.Test;
public class MapperDaoTest extends BaseTester {
@Test
public void testUpdateUser(){
User user =new User();
user.setUid(1);
user.setUsername("admmin");
MapperDao mapperDao=sqlSession.getMapper(MapperDao.class);
mapperDao.updateUser(user);
sqlSession.commit();
}
}
删除
1.编写Mapperdao接口和方法
package com.sdfzxy.dao;
import com.sdfzxy.domain.User;
public interface MapperDao {
void delUser(Integer uid);
}
别名:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KiliSgfz-1571107720663)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571100546898.png)]
2.修改映射文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VJpsggi3-1571107720664)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571100868544.png)]
3.测试
import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.util.BaseTester;
import org.junit.Test;
public class MapperDaoTest extends BaseTester {
@Test
public void testDelUser(){
MapperDao mapperDao=sqlSession.getMapper(MapperDao.class);
mapperDao.delUser(16);
sqlSession.commit()
}
}
简单查询
查询所有的记录
情况一:结果集的字段名(不是表的字段名)和实体类属性名一致
1.编写Mapperdao接口和方法
package com.sdfzxy.dao;
import com.sdfzxy.domain.User;
import java.util.List;
public interface MapperDao {
List<User>findAllUsers1();
}
2.修改映射文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UvhgOXN4-1571107720664)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571101811638.png)]
3:测试
import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.util.BaseTester;
import org.junit.Test;
import java.util.List;
public class MapperDaoTest extends BaseTester {
@Test
public void testFindAllUser1(){
MapperDao mapperDao =sqlSession.getMapper(MapperDao.class);
List<User> allUsers1 = mapperDao.findAllUsers1();
System.out.println(allUsers1);
}
}
情况二:结果集的字段名(不是表的字段名)和实体类属性名不一致
1.编写Mapperdao接口和方法
package com.sdfzxy.dao;
import com.sdfzxy.domain.User;
import java.util.List;
public interface MapperDao {
List<User>findAllUsers2();
}
2.修改映射文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWbXmjVR-1571107720665)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571102716290.png)]
import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.util.BaseTester;
import org.junit.Test;
import java.util.List;
public class MapperDaoTest extends BaseTester {
@Test
public void testFindAllUser2(){
MapperDao mapperDao =sqlSession.getMapper(MapperDao.class);
List<User> allUsers2 = mapperDao.findAllUsers2();
System.out.println(allUsers2);
}
条件查询
只有一个简单类型的参数
1.编写Mapperdao接口和方法
User findUserByUid(Integer uid);
2.修改映射文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a3jUpRsP-1571107720665)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571103200995.png)]
3.测试
import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.util.BaseTester;
import org.junit.After;
import org.junit.Test;
import java.util.List;
public class MapperDaoTest extends BaseTester {
@Test
public void testFindeOne(){
MapperDao mapperDao =sqlSession.getMapper(MapperDao.class);
User userByUid = mapperDao.findUserByUid(103);
System.out.println(userByUid);
}
}
多个简单类型的参数
1.编写Mapperdao接口和方法
User findUserByUidUsername(Integer uid,String username);
2.修改映射文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2nlMoX3H-1571107720666)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571103590553.png)]
测试
import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.util.BaseTester;
import org.junit.After;
import org.junit.Test;
import java.util.List;
public class MapperDaoTest extends BaseTester {
@Test
public void testFindeUidUsername(){
MapperDao mapperDao=sqlSession.getMapper(MapperDao.class);
System.out.println(mapperDao.findUserByUidUsername(1, "admmin"));
}
}
使用VO对象进行封装多个参数
- VO:variable object,变量对象,存放的是函数或全局代码执行过程中需要用到的局部变量(类似POJO)
1.把查询的条件封装到VO对象
创建UserVo类
package com.sdfzxy.domain;
import java.io.Serializable;
public class UserVo implements Serializable {
private Integer uid;
private String username;
public UserVo() {
}
public UserVo(Integer uid, String username) {
this.uid = uid;
this.username = username;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
2。编写MapperDao
User findUserByUidUsername1(UserVo userVo);
2.修改映射文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-drcThKA5-1571107720666)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571104840489.png)]
3。测试
import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.domain.UserVo;
import com.sdfzxy.util.BaseTester;
import org.junit.Test;
import java.util.List;
public class MapperDaoTest extends BaseTester {
@Test
public void testFindeUidUsername1(){
UserVo userVo=new UserVo();
userVo.setUid(1);
userVo.setUsername("admmin");
MapperDao mapperDao=sqlSession.getMapper(MapperDao.class)
User userByUidUsername1 = mapperDao.findUserByUidUsername1(userVo);
System.out.println(userByUidUsername1);
}
}
模糊查询
方式1:
1。编写MapperDao
List< User> findUserByUidUsername2(String username);
2。修改映射文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AFNj0hSj-1571107720666)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571105529269.png)]
3.测试
import com.sdfzxy.dao.MapperDao;
import com.sdfzxy.domain.User;
import com.sdfzxy.domain.UserVo;
import com.sdfzxy.util.BaseTester;
import org.junit.Test;
import java.util.List;
public class MapperDaoTest extends BaseTester {
@Test
public void testFindeUidUsername2(){
MapperDao mapperDao=sqlSession.getMapper(MapperDao.class);
List<User> userByUidUsername2 = mapperDao.findUserByUidUsername2("%user%");
System.out.println(userByUidUsername2);
}
}
方式2:
1.编写mapper接口
List< User> findUserByUidUsername3(String username);
2修改映射文件:(推荐使用)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C04X8b0S-1571107720667)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571106132691.png)]
3.测试:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HmFlYVK1-1571107720667)(E:\学习文件\每日笔记\day45_Mybatis框架.assets\1571106283171.png)]
面试题:
#{username}和${username}的区别
#表示占位符
$表示字符串拼接,存在sql注入问题,不建议使用
关于映射文件总结
标签 | 属性 | 说明 |
---|---|---|
mapper | namespace | 唯一区别不用的配置文件,在使用代理方式的dao编码时,取值要和Dao接口名称保持一致 |
insert delete update select | id | 文件中要求**唯一,取值和dao方法名一致**** |
insert delete update select | parameterType | 指定参数类型:Integer存在别名:int Integer,一般可以省略该属性 |
insert delete update select | resultType | 指定实体的类型.在结果集的字段名和实体类属性名一致时使用,自动映射 |
insert delete update select | resultMap | 配合resultMap标签使用,指定手动映射的id取值 |
面试题:
#{username}和${username}的区别
#表示占位符
$表示字符串拼接,存在sql注入问题,不建议使用
关于映射文件总结
标签 | 属性 | 说明 |
---|---|---|
mapper | namespace | 唯一区别不用的配置文件,在使用代理方式的dao编码时,取值要和Dao接口名称保持一致 |
insert delete update select | id | 文件中要求**唯一,取值和dao方法名一致**** |
insert delete update select | parameterType | 指定参数类型:Integer存在别名:int Integer,一般可以省略该属性 |
insert delete update select | resultType | 指定实体的类型.在结果集的字段名和实体类属性名一致时使用,自动映射 |
insert delete update select | resultMap | 配合resultMap标签使用,指定手动映射的id取值 |