• Spring集成MyBatis01 【推荐使用】、springMVC中文乱码和json转换问题


    1 导包

      

      1.1 spring-webmvc : spring框架包(当然里面也包含springmvc)

      1.2 mybatis : mybatis框架包

      1.3 mybatis-spring : spring框架集成mybatis框架需要用到的包

      1.4 spring-jdbc : springjdbc包

      1.5 mysql:MySQL数据库驱动包

      1.6 junit : 单元测试包

      1.7 dbcp : 数据库连接池

     1 <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">
     2   <modelVersion>4.0.0</modelVersion>
     3   <groupId>cn.xiangxu.spring</groupId>
     4   <artifactId>mybatis03</artifactId>
     5   <version>0.0.1-SNAPSHOT</version>
     6   <dependencies>
     7       <dependency>
     8           <groupId>org.springframework</groupId>
     9           <artifactId>spring-webmvc</artifactId>
    10           <version>3.2.8.RELEASE</version>
    11       </dependency>
    12       <dependency>
    13           <groupId>org.mybatis</groupId>
    14           <artifactId>mybatis</artifactId>
    15           <version>3.2.8</version>
    16       </dependency>
    17       <dependency>
    18           <groupId>org.mybatis</groupId>
    19           <artifactId>mybatis-spring</artifactId>
    20           <version>1.2.3</version>
    21       </dependency>
    22       <dependency>
    23           <groupId>org.springframework</groupId>
    24           <artifactId>spring-jdbc</artifactId>
    25           <version>3.2.8.RELEASE</version>
    26       </dependency>
    27       <dependency>
    28           <groupId>mysql</groupId>
    29           <artifactId>mysql-connector-java</artifactId>
    30           <version>5.1.23</version>
    31       </dependency>
    32       <dependency>
    33           <groupId>junit</groupId>
    34           <artifactId>junit</artifactId>
    35           <version>4.12</version>
    36       </dependency>
    37       <dependency>
    38           <groupId>commons-dbcp</groupId>
    39           <artifactId>commons-dbcp</artifactId>
    40           <version>1.4</version>
    41       </dependency>
    42   </dependencies>
    43 </project>
    jar包的XML文件

     

    2 配置文件

      只需要添加spring的配置文件,不需要添加mybatis的配置文件;直接mybatis有关的配置spring配置文件中完成

      2.1 配置能读取含有数据库连接信息的properties文件

      2.2 配置数据库连接池

      2.3 配置SqlSessionFactoryBean

        SqlSessionFactoryBean中包含了数据库连接池映射文件的信息

        配置SqlSessionFactoryBean的作用

          通过SqlSessionFactoryBean来配置数据库连接池和映射文件位置

          可以通过SqlSessionFactoryBean来创建SqlSession对象

      2.4 配置MapperScannerConfigurer

         该bean负责调用SqlSession的getMapper方法,然后将得到的对象放到spring容器里面(默认的id是首字母小写后的接口名,也可以使用@Repository进行重命名) -->> 即:将mapper映射器变成一个对象放到spring容器中使用

     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" xmlns:context="http://www.springframework.org/schema/context"
     4     xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"
     5     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
     6     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util"
     7     xmlns:jpa="http://www.springframework.org/schema/data/jpa"
     8     xsi:schemaLocation="
     9         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    10         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
    11         http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
    12         http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
    13         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
    14         http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
    15         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
    16         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
    17         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
    18 
    19     <!-- 读取config.properties文件 -->
    20     <util:properties id="config" 
    21     location="classpath:mysql.properties"/>
    22     
    23     <!-- 配置连接池 -->
    24     <bean id="ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">       
    25       <property name="driverClassName" value="#{config.driverClassName}" />      
    26       <property name="url" value="#{config.url}" />      
    27       <property name="username" value="#{config.username}" />      
    28       <property name="password" value="#{config.password}" />      
    29     </bean>
    30     
    31     <!-- 配置SqlSessionFactoryBean -->
    32     <bean id="ssfb" class="org.mybatis.spring.SqlSessionFactoryBean">
    33         <!-- 指定连接池的位置 -->
    34         <property name="dataSource" ref="ds"></property>
    35         <!-- 指定映射文件的位置 -->
    36         <property name="mapperLocations" value="classpath:cn/xiangxu/telecom/login/entity/*.xml"></property>
    37     </bean>
    38     
    39     <!-- 配置MapperScannerConfigurer -->
    40     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    41         <!-- Mapper映射器所在的包 -->
    42         <property name="basePackage" value="cn.xiangxu.telecom.login.dao"></property>
    43         <!-- 指定只有带该注解的映射器才会被扫描   --> 
    44         <property name="annotationClass" value="cn.xiangxu.telecom.login.annotations.MyBatisRepository"></property>
    45     </bean>
    46     
    47     
    48     
    49     
    50 </beans>
    mybatis-spring配置文件

    3 编写实体类

      实体类的属性名最好表的字段名保持一致

     1 package cn.xiangxu.telecom.login.entity;
     2 
     3 import java.io.Serializable;
     4 
     5 public class Admin implements Serializable {
     6     private Integer id;
     7     private String name;
     8     private String password;
     9     private String gender;
    10     
    11     public Integer getId() {
    12         return id;
    13     }
    14     public void setId(Integer id) {
    15         this.id = id;
    16     }
    17     public String getName() {
    18         return name;
    19     }
    20     public void setName(String name) {
    21         this.name = name;
    22     }
    23     public String getPassword() {
    24         return password;
    25     }
    26     public void setPassword(String password) {
    27         this.password = password;
    28     }
    29     public String getGender() {
    30         return gender;
    31     }
    32     public void setGender(String gender) {
    33         this.gender = gender;
    34     }
    35     
    36     public String toString() {
    37         return "Admin [id=" + id + ", name=" + name + ", password=" + password + ", gender=" + gender + "]";
    38     }
    39     
    40 }
    实体类Admin.java

    4 编写映射文件

      映射文件和相应的实体类一般放在同一个包里面

      要求

        映射文件的 namespace属性值必须是相应Mapper映射器的接口名(包括包名)

        例如:namespace="cn.xiangxu.telecom.login.dao.AdminDao"

     1 <?xml version="1.0" encoding="UTF-8" ?>  
     2 <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
     3  "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
     4 
     5 <mapper namespace="cn.xiangxu.telecom.login.dao.AdminDao">
     6     <insert id="insert" parameterType="cn.xiangxu.telecom.login.entity.Admin">
     7     <!-- 注意:parameterType的属性值一定要写上类名(基本类型除外) -->
     8         INSERT INTO admin
     9         (name, password, gender)
    10         VALUES(#{name}, #{password}, #{gender})
    11     </insert>    
    12     
    13     <select id="findAll" resultType="cn.xiangxu.telecom.login.entity.Admin">
    14         SELECT * FROM admin
    15     </select>
    16     
    17     <select id="findByName" parameterType="String" resultType="cn.xiangxu.telecom.login.entity.Admin">
    18         SELECT * FROM admin
    19         WHERE NAME = #{MYNAME}
    20     </select>
    21     
    22     <update id="modify" parameterType="cn.xiangxu.telecom.login.entity.Admin">
    23         UPDATE admin 
    24         SET password=#{password}, gender=#{gender}
    25         WHERE name=#{name}
    26     </update>
    27     
    28     <delete id="deleteByName" parameterType="String">
    29         DELETE FROM admin
    30         WHERE name=#{deleteName}
    31     </delete>
    32     
    33     <select id="findByName2" parameterType="String" resultType="Map">
    34         SELECT * FROM admin
    35         WHERE name=#{selectName}
    36     </select>
    37     
    38     <!-- 如果实体类的属性名和表的字段名不一致,那么不一致的字段将返回null -->
    39     <select id="findByName3" parameterType="String" resultType="cn.xiangxu.telecom.login.entity.Admin2">
    40         SELECT * FROM admin
    41         WHERE name = #{selectName}
    42     </select>
    43     
    44     <!-- 利用sql的别名解决实体类的属性名和标的字段名不一致的问题 -->
    45     <select id="findByName4" parameterType="String" resultType="cn.xiangxu.telecom.login.entity.Admin2">
    46         SELECT id, name, password word, gender gender1 FROM admin
    47         WHERE name = #{selectName}
    48     </select>
    49     
    50     <!-- 使用resultMap元素解决实体类的属性名和标的字段名不一致的问题 -->
    51     <resultMap type="cn.xiangxu.telecom.login.entity.Admin2" id="admin2Map">
    52         <result property="word" column="password"></result>
    53         <result property="gender1" column="gender"></result>
    54     </resultMap>
    55     <select id="findByName5" parameterType="String" resultMap="admin2Map">
    56         SELECT * FROM admin
    57         WHERE name=#{selectName}
    58     </select>
    59     
    60     
    61     
    62     
    63     
    64 </mapper>
    映射文件的配置

    5 编写Mapper映射器

      要求

        方法名必须和映射文件中的sqlId属性值保持一致

        方法的参数类型要与映射文件的parameterType保持一致

        方法的返回类型要与映射文件的resultType文件保持一致

     1 package cn.xiangxu.telecom.login.dao;
     2 
     3 import java.util.List;
     4 import java.util.Map;
     5 
     6 import cn.xiangxu.telecom.login.entity.Admin;
     7 import cn.xiangxu.telecom.login.entity.Admin2;
     8 
     9 public interface AdminDao {
    10     public void insert(Admin admin); // 插入方法
    11     public List<Admin> findAll(); // 查询所有方法
    12     public Admin findByName(String name); // 限定查询方法
    13     public void modify(Admin admin); // 修改方法
    14     public void deleteByName(String name); // 删除方法
    15     
    16     public Map<Object, Object> findByName2(String name); // 查询结果返回Map 的方法
    17     public Admin2 findByName3(String name); // 实体类的属性名和表的字段名不一致的情况
    18     public Admin2 findByName4(String name);
    19     public Admin2 findByName5(String name);
    20 }
    Mapper映射文件

    6 spingMVC中文乱码

      参考博文

    7 SpringMVC响应数据JSON转化问题

      参考博文

    获取本博客源代码:点击前往

  • 相关阅读:
    error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
    E: 无法获得锁 /var/lib/apt/lists/lock
    卸载nginx
    服务器文件传输
    一些重要的sql命令
    设置某个字段的值是唯一的
    mysql注释的方法
    认证 (authentication) 和授权 (authorization) 的区别
    neutron_lib: 一个进程内的发布与订阅
    人工智能导论作业
  • 原文地址:https://www.cnblogs.com/NeverCtrl-C/p/6875878.html
Copyright © 2020-2023  润新知