传智播客学习之day59-mybatis初步

 

工具和环境: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语句。

使用#{} 去替换一个变量。

直接获取自增的id的值

视频-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:全天总结

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值