工具和环境:apache-maven-3.2.3
eclipse_luna_4.4.0_winX86
1、配置环境
1.用提供的eclipse版本4.4.1
2.在eclipse界面打开window-perferences
3.修改字体 搜索font
3.配置本地Java版本,1.7_045,搜索jre
选择jdk路径
4.配置maven
设置settings文件
将settings文件替换掉提供的
设置本地仓库 打开文件 56行 设置仓库路径
5.导入提供的父工程,意义:项目可能有N个工程,集中定义版本信息。
file-import
<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>cn.itcast.parent</groupId>
<artifactId>itcast-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 集中定义依赖版本号 -->
<properties>
<junit.version>4.10</junit.version>
<spring.version>4.1.3.RELEASE</spring.version>
<mybatis.version>3.2.8</mybatis.version>
<mybatis.spring.version>1.2.2</mybatis.spring.version>
<mybatis.paginator.version>1.2.15</mybatis.paginator.version>
<mysql.version>5.1.32</mysql.version>
<slf4j.version>1.6.4</slf4j.version>
<jackson.version>2.4.2</jackson.version>
<druid.version>1.0.9</druid.version>
<httpclient.version>4.3.5</httpclient.version>
<jstl.version>1.2</jstl.version>
<servlet-api.version>2.5</servlet-api.version>
<jsp-api.version>2.0</jsp-api.version>
<joda-time.version>2.5</joda-time.version>
<commons-lang3.version>3.3.2</commons-lang3.version>
<commons-io.version>1.3.2</commons-io.version>
</properties>
<!-- 设置deploy地址 -->
<distributionManagement>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>http://maven.taotao.com:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>nexus</id>
<name>Nexus</name>
<url>http://maven.taotao.com:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
<dependencyManagement>
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.spring.version}</version>
</dependency>
<dependency>
<groupId>com.github.miemiedev</groupId>
<artifactId>mybatis-paginator</artifactId>
<version>${mybatis.paginator.version}</version>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-api.version}</version>
<scope>provided</scope>
</dependency>
<!-- 时间操作组件 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda-time.version}</version>
</dependency>
<!-- Apache工具组件 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
2.创建maven工程
1.创建简单的maven工程 版本选择1.0.0 在pom文件里导入父工程的坐标
<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>
<parent>
<groupId>cn.itcast.parent</groupId>
<artifactId>itcast-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>mybatis.day01</groupId>
<artifactId>mybatis-day01</artifactId>
<version>1.0.0-SNAPSHOT</version>
</project>
解决小红叉的问题
视频-02:回顾jdbc
1.启动mysql,用Navicat链接mysql,创建数据库,命名为mybatis,运行提供的sql文件。
2.在pom文件导入mysql驱动,导入单元测试,去掉版本信息
3.创建类JDBCDemo,main方法
4.JDBC步骤,代码
package cn.itcast.jdbc;
package cn.itcast.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JdbcDemo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1、加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 2、创建连接
String url="jdbc:mysql://localhost:3306/mybatis";
String user = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, user, password);
// 3、获取statement对象
String sql = " select * from tb_user where id = ?" ;
PreparedStatement pstmt = conn.prepareStatement(sql);
// 设置参数
pstmt.setLong(1, 1l);
// 4、发送sql ,执行sql
ResultSet rs = pstmt.executeQuery();
// 5、处理结果集
while(rs.next()){
System.out.println(rs.getString("user_name"));
System.out.println(rs.getString("name"));
}
// 6、释放资源
rs.close();
pstmt.close();
conn.close();
}
}
5.JDBC的缺点 耦合太严重
1、加载驱动问题:
每次执行都加载驱动
驱动名称,硬编码到java代码中,如果需要修改驱动。需要修改java文件
解决方案:将驱动名称放入到外部的配置文件
2、数据库的连接信息,硬编码到java代码中,解决方案:外部配置文件
3、设置参数的问题:
参数下标硬编码了。需要人为的去判断参数的位置。
4、遍历结果集:需要人工的判断字段名,以及个位置参数类型,不方便
是否可以:能够将结果集直接映射到一个pojo对象中
5、频繁的创建连接,关闭连接。导致资源浪费,影响性能,解决:连接池。
视频-03:mybatis介绍
mybatis的前身是ibatis
在mybatis的包里面可以看到,ibatis的字样。
视频-04:mybatis的整体架构
视频-05:mybatis入门
怎样学习一个新技术 去官网或者博客 找demo
打开提供的mybatis官方文档,照着操作
创建类 Hello 在src-main-resource下创建xml配置文件mybatis-config.xml和mapper.xml
mybatis-config.xm配置文件
<?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="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper.xml"/>
</mappers>
</configuration>
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="abc">
<select id="selectUser" resultType="cn.itcast.mybatis.pojo.User">
select * from tb_user where id = #{id}
</select>
</mapper>
二者的关系
视频-06:入门案例整理,mybatis加入日志
添加日志依赖
创建日志文件log4j.properties
log4j.rootLogger=DEBUG,A1
log4j.logger.org.mybatis=DEBUG
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
执行Hello类的main方法:会打印详细的执行过程日志
2018-11-21 13:39:26,363 [main] [org.apache.ibatis.logging.LogFactory]-[DEBUG] Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
2018-11-21 13:39:26,386 [main] [org.apache.ibatis.datasource.pooled.PooledDataSource]-[DEBUG] PooledDataSource forcefully closed/removed all connections.
2018-11-21 13:39:26,386 [main] [org.apache.ibatis.datasource.pooled.PooledDataSource]-[DEBUG] PooledDataSource forcefully closed/removed all connections.
2018-11-21 13:39:26,386 [main] [org.apache.ibatis.datasource.pooled.PooledDataSource]-[DEBUG] PooledDataSource forcefully closed/removed all connections.
2018-11-21 13:39:26,386 [main] [org.apache.ibatis.datasource.pooled.PooledDataSource]-[DEBUG] PooledDataSource forcefully closed/removed all connections.
org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@2389c90forg.apache.ibatis.session.defaults.DefaultSqlSession@4207c21e2018-11-21 13:39:26,501 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Opening JDBC Connection
2018-11-21 13:39:27,575 [main] [org.apache.ibatis.datasource.pooled.PooledDataSource]-[DEBUG] Created connection 1691073795.
2018-11-21 13:39:27,576 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@64cbbd03]
2018-11-21 13:39:27,595 [main] [abc.selectUser]-[DEBUG] ==> Preparing: select * from tb_user where id = ?
2018-11-21 13:39:27,677 [main] [abc.selectUser]-[DEBUG] ==> Parameters: 1(Long)
2018-11-21 13:39:27,733 [main] [abc.selectUser]-[DEBUG] <== Total: 1
User [id=1, userName=null, password=123456, name=张三, age=30, sex=1, birthday=Wed Aug 08 00:00:00 CST 1984, created=Fri Sep 19 16:56:04 CST 2014, updated=Sun Sep 21 11:24:59 CST 2014]
剖析源码
视频-07:完成crud创建dao接口
创建接口UserDao
package cn.itcast.dao;
import java.util.List;
import cn.itcast.mybatis.pojo.User;
public interface UserDao {
/**
* 根据id查询用户信息
*
* @param id
* @return
*/
public User queryUserById(Long id);
/**
* 查询所有用户信息
*
* @return
*/
public List<User> queryAllUser();
/**
* 根据id删除用户信息
*
* @param id
*/
public void deleteUserById(Long id);
/**
* 添加用户信息
*
* @param user
*/
public void addUser(User user);
/**
* 修改用户信息
*
* @param user
*/
public void updateUser(User user);
}
实现类UserDaoImpl
package cn.itcast.dao.impl;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import cn.itcast.dao.UserDao;
import cn.itcast.mybatis.pojo.User;
public class UserDaoImpl implements UserDao {
private SqlSession sqlsession;
//临时解决方法 构造的时候传入sqlSession
public UserDaoImpl(SqlSession sqlsession) {
this.sqlsession=sqlsession;
}
@Override
public User queryUserById(Long id) {
return null;
}
@Override
public List<User> queryAllUser() {
return null;
}
@Override
public void deleteUserById(Long id) {
}
@Override
public void addUser(User user) {
}
@Override
public void updateUser(User user) {
}
}
创建usermapper.xml文件
方法名对应的usermapper.xml的id 参数名的组成是名称空间+id
<?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="user">
<select id="queryUserById" resultType="cn.itcast.mybatis.pojo.User">
select *,user_name as userName from tb_user
where id = #{id}
</select>
<select id="queryAllUser" resultType="cn.itcast.mybatis.pojo.User">
select *,user_name as userName from tb_user
</select>
<delete id="deleteUserById">
delete fron tb_user where
id =#{id}
</delete>
<insert id="addUser" >
INSERT INTO tb_user (
id,
user_name,
password,
name,
age,
sex,
birthday,
created,
updated
)
VALUES
(
NULL,
#{userName},
#{password},
#{name},
#{age},
#{sex},
#{birthday},
NOW(),
NOW()
);
</insert>
<update id="updateUser" >
UPDATE tb_user
<!--userName要填写pojo对象里的对应的属性名 -->
user_name = #{userName},
password = #{password},
name = #{name},
age =#{age},
sex = #{sex},
birthday = #{birthday},
updated = NOW()
WHERE
(id = #{id});
</update>
</mapper>
创建测试类 在userDao类上右键 new junit test case 选择 src/test/java包
勾选setup,下一步
全部选中,点击finish
测试类代码:
package cn.itcast.dao;
import java.io.InputStream;
import java.util.Date;
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.Before;
import org.junit.Test;
import cn.itcast.dao.impl.UserDaoiMPL;
import cn.itcast.mybatis.pojo.User;
public class UserDaoTest {
// 测试需要UserDao对象调用需要测试的方法
UserDao userDao;
SqlSession sqlSession;
// 测试方法执行之前会执行的代码
@Before
public void setUp() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
sqlSession = sqlSessionFactory.openSession();
userDao = new UserDaoiMPL(sqlSession);
}
@Test
public void testQueryUserById() {
User user = userDao.queryUserById(1l);
System.out.println(user);
}
@Test
public void testQueryAllUser() {
List<User> users = userDao.queryAllUser();
for (User user : users) {
System.out.println(user);
}
}
@Test
public void testDeleteUserById() {
userDao.deleteUserById(13l);
}
@Test
public void testAddUser() {
User user = new User();
user.setAge(19);
user.setBirthday(new Date());
user.setName("中桥2");
user.setPassword("123456");
user.setSex(2);
user.setUserName("zhongqiao2");
userDao.addUser(user);
sqlSession.commit();
}
@Test
public void testUpdateUser() {
//先查询,后更新
User user = userDao.queryUserById(13l);
user.setAge(100);
userDao.updateUser(user);
}
}
执行测试 方法-右键
视频-09:mapper接口动态代理
在mybatis中dao层的接口的名字不在使用***Dao 而是修改成***Mapper
例如:UserDao,修改成UserMapper。
利用动态代理 不用书写UserMapper的实现类
作出如下约定 名称空间是UserMapper的全路径,id是UserMapper中的方法名
<?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="cn.itcast.dao.UserDao">
<select id="queryUserById" resultType="cn.itcast.mybatis.pojo.User">
select *,user_name as userName from tb_user
where id = #{id}
</select>
测试类中 获取userdao:
sqlSession = sqlSessionFactory.openSession();
userDao = sqlSession.getMapper(UserDao.class);
视频-10:mybatis动态代理总结
mapper.xml 根标签的 namespace 属性
如果希望使用mybatis通过的动态代理的接口,就需要namespace 中的值,和需要对应的Mapper(dao)接口的全路径一直
视频-11:知识点回顾
1、书写全局配置文件 mybatis-config.xml
2、创建sqlSessionFactory
3、获取sqlSession
4、利用sqlSession执行sql
5、关闭,或者 提交事务
dao层接口的名字重新修改成**mapper
以后Mapper接口的实现类,不许书写了
获取mapper接口的实现类
UserMapper usermapper = sqlSession.getMapper(UserMapper.class);
视频-12:properties说明
properties标签可引入外部的配置文件 用于配置数据库的链接参数
标签的顺序
mybatis-config配置文件更改如下:
<?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>
<properties resource="jdbc.properties">
</properties>
<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="mapper.xml"/>
<mapper resource="userMapper.xml"/>
</mappers>
</configuration>
jdbc.properties文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=123
视频-13:开启驼峰匹配
settings
调整 settings 中的设置是非常关键的,它们会改变 MyBatis 的运行时行为。下表描述了设置中各项的意图、默认值等。
开启驼峰匹配:从经典数据库的命名规则,到经典java命名规则的映射
java命名规则:驼峰书写, 大小写区分两个单词的界限。举例: userName;
数据库经典命名规则:两个单词之间,使用下划线分割。举例:user_name
开启驼峰匹配:相当于去掉数据库名字中的下划线,然后在与java中的属性名进行对应。
user_name → userName
配置文件:
<settings>
<!--开启驼峰匹配 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
视频-14:类型别名
开启类型别名的包扫描,类型别名不区分大小写,建议用类名
<typeAliases>
<!--单个类型别名 -->
<!-- <typeAlias type="cn.itcast.mybatis.pojo.User" alias="User"/> -->
<!--包下所有类型别名 -->
<package name="cn.itcast.mybatis.pojo"/>
</typeAliases>
xxxMapper里类型直接用 别名
<mapper namespace="cn.itcast.dao.UserDao">
<select id="queryUserById" resultType="User">
select *,user_name as userName from tb_user
where id = #{id}
</select>
视频-15:mybatis自带的类型别名
已经为普通的 Java 类型内建了许多相应的类型别名。它们都是大小写不敏感的,需要注意的是由于重载原始类型的名称所做的特殊处理。
例如 查询总数返回Integer 直接写Integer
别名 | 映射的类型 |
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
object | Object |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |
视频-16:类型处理器,拦截器
typeHandlers(类型处理器)
plugins(插件,又名拦截器)
视频-17:环境管理
environments(环境)
预发布环境;
开发环境→测试环境→预发布环境→生产环境
每个环境使用的数据和数据库不一样
视频-18:mapper
使用mapper接口路径:
这里所谓的mapper接口路径。实际上就是dao的接口路径。在mybatis中,通常把dao的包叫做mapper
类名,也叫做mapper
1、定义一个接口
2、在接口所在的包中定义mapper.xml
3、在mybatis-config.xml 中通过class路径,引入mapper。要求mapper.xml 中的名称空间是类的接口的全路径
问题:
1、mapper.xml 和 java文件没有分离。 明天和spring整合之后解决。
2、需要一个一个的去加载mapper
使用mapper接口扫描包
缺点:
1、如果包的路径有很多? 明天spring整合的时候解决。
2、mapper.xml和mapper.java没有分离。
视频-19:mybatis-config.xml整理
1、properties标签--- 引入外部properties文件。 在环境的位置可以使用${key} 直接获取properties中的内容。
2、settings:开启驼峰匹配。
从数据库的经典命名规则到java经典命名规则的映射; 把数据库中的下划线去顶在和java中的内容进行映射。
3、typealiases:类型别名。 为一些java对象,去起一个简写的名字,减少mapper.xml中的 代码书写量。
<typeAliases>
<package name="cn.itcast.mybatis.pojo"/>
</typeAliases>
4、环境:数据库的连接信息
5、mappers:关联外部的mapper.xml文件的
把外部的mapper.xml加载到mybatis中
扫描包的方式:
<mappers>
<!--
扫描指定包下面的所有的接口
要求:
1、要求mapper.xml文件的名字和mapper接口的名字,一致
2、要求mapper.xml文件 和 mapper接口类在一个目录下
-->
<package name="cn.itcast.mybatis.mapper"/>
</mappers>
视频-20select 标签说明
select – 书写查询sql语句
id属性:当前名称空间下的statement的唯一标识。必须。要求id和mapper接口中的方法的名字一致。
resultType:将结果集映射为java的对象类型。必须(和 resultMap 二选一)
parameterType:传入参数类型。可以省略
视频-21:insert 语句以及获取自增长id
insert 的几个属性说明:
id属性:当前名称空间下的statement的唯一标识(必须属性);
parameterType:传入的参数类型,可以省略。
标签内部:具体的sql语句。
使用#{} 去替换一个变量。
视频-22:delete和update说明
update 的几个属性说明:
id属性:当前名称空间下的statement的唯一标识(必须属性);
parameterType:传入的参数类型,可以省略。
标签内部:具体的sql语句。
使用#{} 去替换一个变量。
delete 的几个属性说明:
id属性:当前名称空间下的statement的唯一标识(必须属性);
parameterType:传入的参数类型,可以省略。
标签内部:具体的sql语句。
使用#{} 去替换一个变量。
视频-23:$获取参数
如何传递一个表名 查询数据库数据 ?
注意#{} 只是替换? 这个功能,sql语句中 ? 只能出现where中。 当作一个变量
${} 数据:是进行字符串拼接。
如果使用${} 去取出参数信息,则需要在方法的参数列表上加上一个注释@param 表示参数的名字
#{} 只是表示站位,与参数的名字无关。
sql语句动态生成的时候,使用${};
sql语句中某个参数进行站位的时候#{}
视频-24:mybatis传入多个参数
传入多个参数 直接用0 1 表示参数的顺序 即可传入
或者parm1 parm2
第三种 直接给参数取名字 推荐
视频-25:$和#区别
#占位符,{随便书写}
$字符串拼接,{value取值},不能防止sql注入。
${} statement对象
#{} Preparedstatement对象
${} 方式:
1、$字符串拼接,# 参数站位相当于jdbc中的?
2、$不能够防止sql注入,#可以防止sql注入的
3、$可以替换sql语句任何一个内容,#只能替换参数
4、$如果操作字符串,需要在sql中使用单引号。 #不需要(不需要判断数据类型)
案例:根据姓名进行模糊查询
使用#
测试:
使用$
mapper定义
视频-26:总结$和#号
视频-27:resultMap
resultMap的自动映射
对crud标签内容进行映射补充
视频-28:sql片段
可以把sql语句片段进行提取 减少冗余
视频-29:全天总结