• 11.24Spring学习第四天


    整合Mybatis(重点)

    步骤

    1.引入依赖

    1. <!--引入相关依赖-->
    2. <!-- spring jdbc -->
    3. <dependency>
    4. <groupId>org.springframework</groupId>
    5. <artifactId>spring-jdbc</artifactId>
    6. <version>${spring.version}</version>
    7. </dependency>
    8. <!-- mybatis-->
    9. <dependency>
    10. <groupId>org.mybatis</groupId>
    11. <artifactId>mybatis</artifactId>
    12. <version>3.4.5</version>
    13. </dependency>
    14. <!-- 与spring整合 -->
    15. <dependency>
    16. <groupId>org.mybatis</groupId>
    17. <artifactId>mybatis-spring</artifactId>
    18. <version>1.3.1</version>
    19. </dependency>
    20. <!-- 数据库驱动 -->
    21. <dependency>
    22. <groupId>mysql</groupId>
    23. <artifactId>mysql-connector-java</artifactId>
    24. <version>8.0.12</version>
    25. </dependency>
    26. <!-- 连接池 -->
    27. <dependency>
    28. <groupId>com.alibaba</groupId>
    29. <artifactId>druid</artifactId>
    30. <version>1.1.7</version>
    31. </dependency>

    2.创建mybatis 配置文件 文件名字 mybatis-config.xml

    如果想改名字就去Spring 配置文件中 如图所示

     mybatis 配置文件如下

    1. "1.0" encoding="UTF-8" ?>
    2. configuration
    3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
    5. <configuration>
    6. //创建别名
    7. <typeAliases>
    8. <package name="com.wxx.SpringDay04.entity"/>
    9. typeAliases>
    10. //包路径下所有的文件起别名
    11. //注意:配置mapper接口能找到对应的xml文件(同级目录并且名字相同)
    12. <mappers>
    13. <package name="com.wxx.SpringDay04.mapper"/>
    14. mappers>
    15. configuration>

    将XML文件放到JAVA下需要在poom.xml文件标签下

    1. <build>
    2. <resources>
    3. <resource>
    4. <!-- directory:指定资源文件的位置 -->
    5. <directory>src/main/java</directory>
    6. <includes>
    7. <!-- “**” 表示任意级目录 “*”表示任意任意文件 -->
    8. <!-- mvn resources:resources :对资源做出处理,先于compile阶段 -->
    9. <include>**/*.properties</include>
    10. <include>**/*.xml</include>
    11. </includes>
    12. <!-- filtering:开启过滤,用指定的参数替换directory下的文件中的参数(eg. ${name}) -->
    13. <filtering>false</filtering>
    14. </resource>
    15. <resource>
    16. <directory>src/main/resources</directory>
    17. </resource>
    18. </resources>
    19. </build>

     3.添加applicationContext.xml 配置文件

    如果想修改名字也要修改Test中读取的文件名如图所示

     配置代码如下

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xmlns:aop="http://www.springframework.org/schema/aop"
    6. xsi:schemaLocation="http://www.springframework.org/schema/beans
    7. http://www.springframework.org/schema/beans/spring-beans.xsd
    8. http://www.springframework.org/schema/context
    9. http://www.springframework.org/schema/context/spring-context.xsd
    10. http://www.springframework.org/schema/aop
    11. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
    12. <!--配置扫描注解-->
    13. <context:annotation-config/>
    14. <!--告诉spring,要扫描com.tledu包下面的注解-->
    15. <context:component-scan base-package="com.wxx.SpringDay04"/>
    16. <!--开启切面支持-->
    17. <aop:aspectj-autoproxy/>
    18. <!-- 1) 读取properties中的内容-->
    19. <context:property-placeholder location="classpath:jdbc.properties"/>
    20. <!-- 2) 数据库连接池 -->
    21. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    22. <property name="driverClassName" value="${jdbc.driver}"/>
    23. <property name="url" value="${jdbc.url}"/>
    24. <property name="username" value="${jdbc.username}"/>
    25. <property name="password" value="${jdbc.password}"/>
    26. <property name="maxActive" value="${jdbc.max}"/>
    27. <property name="minIdle" value="${jdbc.min}"/>
    28. </bean>
    29. <!-- 3) 获取 SqlSessionFactory 工厂类-->
    30. <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    31. <property name="dataSource" ref="dataSource"/>
    32. <property name="configLocation" value="classpath:mybatis-config.xml" />
    33. </bean>
    34. <!-- 4) 搜索有哪些 mapper 实现类,把mapper接口自动配置成 spring 中的 <bean>-->
    35. <bean id="scannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    36. <!-- name="basePackage":(起始)包名, 从这个包开始扫描-->
    37. <property name="basePackage" value="com.wxx.SpringDay04.mapper"/>
    38. </bean>
    39. </beans>

    SQL高版本连接依赖的解决

    1. 1.驱动需要加一个cj
    2. jdbc.driver=com.mysql.cj.jdbc.Driver
    3. 2.地址需要加一个时区
    4. jdbc.url=jdbc:mysql://localhost:3306/mybatis_24?serverTimezone=UTC&useSSL=false

    自增id的自动注入

    在XML文件中编写SQL语句时加上keyProperty="user.id" useGeneratedKeys="true" 就会解决自动注入,但是主键必须是自增的.

    1. <insert id="userAndAddress" parameterType="User" keyProperty="user.id" useGeneratedKeys="true">
    2. insert into
    3. t_user(username,`password`,nickname)
    4. VALUES
    5. (#{user.username},#{user.password},#{user.nickname})
    6. </insert>

     Spring的事务回滚(了解)

    步骤

    1引入依赖在poom.xml中引入

    1. <dependency>
    2. <groupId>org.springframework</groupId>
    3. <artifactId>spring-tx</artifactId>
    4. <version>${spring.version}</version>
    5. </dependency>

    2.在bean的配置

    1. <tx:annotation-driven transaction-manager="txManager"/>
    2. <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    3. <property name="dataSource" ref="dataSource"/>
    4. bean>

     3.使用注释

    @Transactional(rollbackFor = Exception.class) 错误一定要抛最大的

    该方法遇到任意异常时,回滚到事务刚开始的时候,也就是方法调用之前

    4.Spring整合jdbcTemplate(不常用,会让数据库和Java代码产生耦合)

    1.引入依赖

    1. <dependency>
    2. <groupId>org.springframework</groupId>
    3. <artifactId>spring-jdbc</artifactId>
    4. <version>${spring.version}</version>
    5. </dependency>

    2.添加Spring的配置文件

    1. <!-- 配置一个数据库的操作模板:JdbcTemplate -->
    2. <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    3. <property name="dataSource" ref="dataSource" />
    4. </bean>

    3.开始手撕代码(复制宇哥的)

    1. @Test
    2. public void jdbcT(){
    3. ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    4. JdbcTemplate jdbcTemplate = applicationContext.getBean(JdbcTemplate.class);
    5. // jdbcTemplate执行更新操作
    6. // jdbcTemplate.execute("update t_user set username='腾达兄' where id=16");
    7. // RowMapper相当于Mybatis中的ResultMap
    8. UserRowMapper userRowMapper=new UserRowMapper();
    9. // query用来查询
    10. List<User> userList = jdbcTemplate.query("select * from t_user where id=?", userRowMapper,16);
    11. for (User eve:userList) {
    12. System.out.println(eve.getUsername());
    13. }
    14. // update用来增删改
    15. jdbcTemplate.update("update t_user set username='腾达兄' where id=16");

    自定义类型转换器

     想要实现自动类型转换就必须是先Converter接口 后边的泛型<泛型1,泛型2>

    泛型1转换泛型2 

     代码如下

    1. @Override
    2. public Date convert(String s) {
    3. Date parse;
    4. if (s == null) {
    5. throw new RuntimeException("参数不能为空");
    6. }
    7. try {
    8. DateFormat df = new SimpleDateFormat("yyyy-MM-dd-HH:mm");
    9. parse = df.parse(s);
    10. } catch (ParseException e) {
    11. throw new RuntimeException("参数转换错误");
    12. }
    13. return parse;
    14. }

    JSON 格式传参会自动转化,但是时间会+8小时所

    解决方法

    1.在实体类需要转换的类型上加一下代码

        @JsonFormat(pattern="YYYY-MM-DD-HH:mm",timezone = "GMT+8")

     为了方便向视图层传值,提供了 Model 专门向视图层传递数据

    1. @SessionAttributes(value = {"username","nickname","age"},types = {String.class,Integer.class})
    2. 该注解,规定的valuekey,当model存放这些key时,session中也会存放对应的值,同步 请求域和seesion域的值
    3. value 是通过key的值来同步,types是通过类型来同步 请求域和seesion域的值

    重定向

    1.重定向 路径/接口/请求,不能再重定向到页面

    2.如果是对本控制层(本类)的方法发起请求,就不需要在redirect:后面加/ 相对路径 相对本层

    3.对其他控制层的方法发起请求,需要在redirect:后面加/ 绝对路径

  • 相关阅读:
    FANUC机器人SRVO-050碰撞检测报警原因分析及处理对策(亲测可用)
    tkinter控件样式
    SAP 通过Debug快速查找 EXPORT MEMORY ID 的 IMPORT MEMORY ID代码位置
    Linux 之 Ubuntu 上 Vim 的安装、配置、常用命令的简单整理
    计算机视觉的相机选型
    项目管理标杆和先驱——华为管理体系(PMP),一文看懂!
    翌加科技:教抖音小店商家采取措施避免售后争议
    让批处理的工作目录指向当前目录
    iPhone升级iOS 16后出现提示“面容ID不可用”怎么办?
    win7电脑开机后找不到explorer. exe怎么办
  • 原文地址:https://blog.csdn.net/Javaxinshoulllll/article/details/128027500