两者分别执行如下的sql语句
select
id,
car_num as carNum,
brand,
guide_price as guidePrice,
produce_time as produceTime,
car_type as carType
from
t_car
where
car_type = #{carType}//以及${catType}
两者的运行日志如下所示
#{}传到mysql中执行的语句是
select id, car_num as carNum, brand, guide_proce as guidePrice, produce_time as produceTime, car_type as carType from t_car where car_type = ?
${}传到mysqk中执行的语句是
select id, car_num as carNum, brand, guide_proce as guidePrice, produce_time as produceTime, car_type as carType from t_car where car_type = 新能源
(新能源是后续传入的值),但是这句sql语句已经出现了语法错误,新能源都没加单引号
#{}和${}的区别:
当往sql语句中传关键字,关键字不能被引号引起来,所以就得用${},直接将传入的关键字拼接到sql语句当中
现实业务当中,可能会存在分表存储数据的情况。
因为一张表存的话,数据量太大。查询效率比较低。
可以将这些数据有规律的分表存储,这样在查询的时候效率就比较高。因为扫描的数据变少了。
日志表:专门存储日志信息的。如果t_log只有一张表,这张表中每天都会产生很多log,慢慢的,这个表中数据会有很多
怎么解决这个问题?
如果想知道某一天的日志信息怎么办?
假设今天是20500101,那么直接查20500101的表就好了
而在查询关于表的时候就要输入日期这个数字,而表名又不需要加引号,所有就要使用${}
批量删除的SQL语句有两种写法:
第一种or:delete from t_car where id=1 or id=2 or id=3;
第二种and:delete from t_car where id in(1,2,3);
应该采用 的方式: ‘ d e l e t e f r o m t c a r w h e r e i d i n ( {}的方式: `delete from t_car where id in( 的方式:‘deletefromtcarwhereidin({ids});`
模糊查询like
需求:根据汽车品牌进行模糊查询
select * from t_car where brand like '%奔驰%';
select * from t_car where brand like '%比亚迪%';
第一种方案:
'%${brand}%'
第二种解决方案:concat函数,这个是MySQL数据库当中的一个函数,专门进行字符串拼接
concat('%',#{brand},'%')
第三种方案:比较鸡肋,可以不算
concat('%',${brand},'%')
第四种方案
"%"#{brand}"%"
在mybatis-config.xml文件中的configuration根标签中
<typeAliases>
<typeAlias type="" alias="" />
<package name="com.powernode.mybatis.pojo"/>
typeAliases>
可以把又长又臭的resultType路径什么的改简单一些,但是namespace不能起别名
mybatis-config.xml文件中的mapper标签
mapper标签的属性可以有三个:
思考:mapper标签的作用是指定SqlMapper.xml文件的路径,指定接口名有什么用呢?
如果你class指定的是com.powernode.mybatis.mapper.CarMapper
那么mybatis框架会自动去com/powernode/mybatis/mapper目录下查找CarMapper.xml文件
注意:也就是说,如果拟采用这种方式,那么就必须要保证CarMapper.xml文件和CarMapper接口必须是在同一个目录下的,并且名字一致。(可以在resource中创建同样的一个目录)
要求类的根路径下必须有:CarMapper.xml
要求在d:/下有CarMapper.xml文件
在IDEA的resource目录下新建多重目录的话,必须是这样建
com/powernode/mybatis/mapper
不能这样
com.powernode.mybatis.mapper
可以在文件->设置->编辑器->代码样式->文件和代码模板中加入MyBatis的核心配置文件和SQL映射文件的模板
DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resources="" />
<typeAliases>
<package name="">
typeAliases>
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
dataSource>
environment>
environments>
<mappers>
<package name="">
mappers>
configuration>
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="">
mapper>
需要我们在插入数据的同时获取到mysql自动生成的主键值,虽然先插入再查询获取也可以,但是这样是分步了。
<insert id="insertCarUseGeneratedKeys" userGeneratedKeys="ture" keyProperty="id">
insert into t_car values(null,#{carNum},#{brand},#{produceTime},#{carType})
insert>
userGeneratedKeys
是是否开启自动生成的主键keyProperty
是将自动生成的主键赋值到何处,这里就是赋值到Car类car对象的id属性名里面去