40-SSM-5

开启全新的一个项目

1.数据库

DELIMITER $$


/*!50003 CREATE DEFINER=`root`@`localhost` PROCEDURE `addUser`(in v_name varchar(30),v_email varchar(50),v_password varchar(20),v_ident varchar(20),v_ident_num varchar(20))
BEGIN
        insert into t_t_user(username,email,password,ident,identnum)values(v_name,v_email,v_password,v_ident,v_ident_num);
        insert into t_t_user_role(user_id,role_id)
        select a.id,b.id from t_t_user a,t_t_role b where a.email = v_email and b.rolename=v_ident;
    END */$$
DELIMITER ;

这里的意思是:

   DELIMITER$$-->这里的意思是告诉mysql,上面的建表过程,已经没了,接下来是一段新的sql

但是这里新的sql,还有几个问题:

①CREATE DEFINER-->创建一个管理权限,有这个权限的可以执行下面的命令

②PROCEDURE-->其实这里有点类似封装sql,报几个sql命令封装成一个

后面写的这几个,其实就相当于,作者自己写的一些命令,在这里跑

2.手动加索引

暂时还没写到select索引的,这里之后肯定有,不然写索引干嘛对吧

3.外键

外键必须添加索引

外键关系的两个表的列必须是数据类型相似

比如int和tinyint可以,而int和char则不可以;

这里有个问题,表A里面的一个字段,这个字段的外键居然是A表的主键...这里实在是不知道啥东西了...

CASCADE
在父表上update/delete记录时,同步update/delete掉子表的匹配记录 

SET NULL
在父表上update/delete记录时,将子表上匹配记录的列设为null (要注意子表的外键列不能为not null)  

NO ACTION
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作  

RESTRICT
同no action, 都是立即检查外键约束

SET NULL
父表有变更时,子表将外键列设置成一个默认的值 但Innodb不能识别

RESTRICT的意思就是,使用了外键的表,当外键所在表有数据的时候,这个时候是不能删除或者更改该表的数据的

SET NULL的意思就是,使用了外键的表,当期增删的时候,被引用的外键所在的表的这一列的值设为NULL
4.执行结果报错:ERROR 1452 : Cannot add or update a child row: a foreign key constraint fails。。。

如果你的一张表,加外键,那么这个外键所在的表的的主键ID,肯定是要跟你的这个表的ID一模一样的,不可能我这边表加了外键的2条数据,而你的那张表有3条...主键和ID都要一样,这样就能保证数据一致性了.

5.自己给自己加外键...暂时不知道这样的操作有什么意义

CREATE TABLE `t_t_func` (
  `id` bigint(5) NOT NULL AUTO_INCREMENT,
  `func_name` varchar(50) DEFAULT NULL,
  `func_code` varchar(50) DEFAULT NULL,
  `pid` bigint(5) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `pid` (`pid`),
  CONSTRAINT `pid` FOREIGN KEY (`pid`) REFERENCES `t_t_func` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8;

6.mapper.xml

<property name="mapperLocations" >
    <array>
        <!--这里直接*,之后看是否需要每一个都写进来-->
        <value>file:E:\backend_demo\src\main\java\mapper\*.xml</value>
    </array>
</property>

这里解析xml文件的时候,不用再写array,直接写*,之后看看是否可行

7.MapperScannerConfigurer

mapper的扫描器别人在这里把sqlSessionFactory扫进来了,但是我的代码里面没有扫

注 意 , 没 有 必 要 去 指 定 SqlSessionFactory 或 SqlSessionTemplate , 因 为 MapperScannerConfigurer 将会创建 MapperFactoryBean,之后自动装配。但是,如果你使 用了一个 以上的 DataSource ,那 么自动 装配可 能会失效 。这种 情况下 ,你可 以使用 sqlSessionFactoryBeanName 或 sqlSessionTemplateBeanName 属性来设置正确的 bean 名 称来使用。这就是它如何来配置的,注意 bean 的名称是必须的,而不是 bean 的引用,因 此,value 属性在这里替代通常的 ref

<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />

8.序列化

在这里BaseModel这个bean是加了序列化,但是其他的bean不一定

在这里确实是一个疑问,为什么要序列化

9.dao里面有若干个mapper,怎么扫进来

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.ld7.client.dao,com.ld7.backend.dao"/>
</bean>

在这里用逗号隔开

10.动态sql

<select id="findPartPermissions" parameterType="map" resultType="int">
    select count(*) from permission
    <where>
        <trim suffixOverrides="and">
            <if test="map.name != null and map.name != ''">
                name LIKE concat(concat('%',#{map.name}),'%') and
            </if>
            <if test="map.plevel != null and map.plevel != ''">
                plevel = #{map.plevel} and
            </if>
        </trim>
    </where>
</select>

在这里使用了动态sql标签

详解一下-->

知识点如下:

①trim

<trim suffixOverrides="and">

把trim标签里面最后的结果,移除最后的"and"字符,必然的话会报sql错误

<trim prefix="" suffix="" suffixOverrides="" prefixOverrides=""></trim>

prefix:在trim标签内sql语句加上前缀。

suffix:在trim标签内sql语句加上后缀。

suffixOverrides:指定去除多余的后缀内容,如:suffixOverrides=",",去除trim标签内sql语句多余的后缀","。

prefixOverrides:指定去除多余的前缀内容

②<if test="">即条件

<if test="map.name != null and map.name != ''">

③concat

字符串拼接

concat ( concat( '%' , #{map.name}  , '%' ) , %)

先拼成一个-->    %map.name%      -->再拼成一个  (%map.name%)% ,这里表示一种模糊查询条件              

sql解释==>

                   按照2个条件查找符合条件的permission-->1.满足map.name的模糊查询;2.map.plevel满足传入条件的

这种定制化sql,其实也不复杂,写多了就知道怎么写了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值