SSM整合之Mybatis整合(二)

整合mybatis  核心 : 就是将SqlSessionFactory纳入spring的IOC容器中,是由SqlSessionFactoryBean中的getobjoce方法

在resources中配置xml文件

 <!--  整合mybatis, 其核心就是将SqlSessionFactory纳入spring的IOC容器 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      
  <!-- 注入数据源, 引用上面配置数据源的bean的id -->
        <property name="dataSource" ref="dataSource"/>
     
   <!-- 指定实体的别名-->
        <property name="typeAliasesPackage" value="edu.nf.ch02.entity"/>

        <!-- 指定mapper映射文件的目录-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>

        <!-- 配置文件插件-->
        <property name="plugins">

            <!-- 装配分页的拦截器 -->
            <bean class="com.github.pagehelper.PageInterceptor">

                <!-- 注入分页属性 -->
                <property name="properties">
                    <props>
                        <!-- 数据库方言 -->
                        <prop key="helperDialect">mysql</prop>

                        <!-- 启用分页注解支持-->
                        <prop key="supportMethodsArguments">true</prop>

                        <!-- 分页合理化-->
                        <prop key="reasonable">true</prop>
                    </props>
                </property>
            </bean>
        </property>
    </bean>

    <!-- 3. 扫描dao的接口包。这样会利用动态代理的机制在运行时创建所有到、接口的实现类 -->
    <mybatis:scan base-package="edu.nf.ch02.dao"/>
</beans>

案例:

创建一个实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class City {
    private Integer cityId;
    private String cityName;
    private String cityCode;
    private String province;
}

dao层

public interface CityDao {

    /**
     * 查询城市信息
     * @param cityName
     * @return
     */
    City getCityByName(String cityName);

    /**
     * 查询城市列表
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<City> listCity(@Param("pageNum") int pageNum,
                        @Param("pageSize") int pageSize);
}

配置mapper文件

<?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="edu.nf.ch02.dao.CityDao">

    <!--编写插入语句,id属性指dao接口的方法名
         如果在mysql配置文件中指定了别名,可以在这里进行引用,否则就必须指定实体的完整类名
          SQL语句中的参数使用ognl表达式#(属性名)来获取实体中的属性值
    -->
    <!-- void saveUser(User user); -->

    <resultMap id="cityMap" type="City">
        <id property="cityID" column="city_id"/>
        <result property="cityCode" column="country"/>
        <result property="cityName" column="city_name"/>
        <result property="province" column="province" />
    </resultMap>


    <select id="getCityByName" resultMap="cityMap">
        select city_id,country,province,city_name  from city_info  where city_name=#{cityName}
    </select>

    <select id="listCity" resultMap="cityMap">
        select city_id,country,province,city_name  from city_info
    </select>

</mapper>

service层

public interface CityService {

    /**
     * 查询城市信息
     * @param name
     * @return
     */
    City getCityByName(String name);

    /**
     * 查询城市列表
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageInfo<City> listCity(int pageNum, int pageSize);
}

配置resource中的xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">


    <!--1 启用包扫描注解 -->
  <context:component-scan base-package="edu.nf.ch02"/>
    <!-- 整合druid连接池,其实也就是druid的数据源纳入spring的IOC容器中
          init - method指定数据源的初始化方法destroy-method指定数据源的close方法
     -->

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <!--注入数据库连接属性 -->
        <property name="driverClassName"  value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/citydb?useSSI=false&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai"/>
        <property name="username" value="root"/>
        <property name="password" value="sb"/>
        <!-- 注入连接池配置属性 -->
        <!-- 最大连接池数量 -->
        <property name="maxActive" value="20"/>
        <!-- 初始化连接池创建的连接个数 -->
        <property name="initialSize" value="5"/>
        <!-- 最小连接池数量,建议和初始化大小一致 -->
        <property name="minIdle" value="5"/>
        <!-- 获取连接最大等待时间,超时则抛异常 单位:毫秒 -->
        <property name="maxWait" value="2000"/>
        <!-- 连接保持空闲而不被驱逐出连接池 单位 : 毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000"/>
        <!-- 销毁连接的线程检测的间隔时间,单位: 毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000"/>
        <!-- 检测连接是否有效 -->
        <property name="testWhileIdle" value="true"/>
        <!-- 必须设置为true,才会触发检测 -->
        <property name="testOnBorrow" value="true"/>
        <!-- 归还连接池的时候,检测是否有效 -->
        <property name="testOnReturn" value="true"/>
        <!-- 是否缓存PreparedStatement,mysql建议关闭 -->
        <property name="poolPreparedStatements" value="false"/>
        <!-- 定义一条伪sql,用于检查连接的可用性 -->
        <property name="validationQuery" value="select 1"/>
    </bean>

    <!--2 整合mybatis 核心: 将SqlSessionFactory纳入spring的IOC容器-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据源,引用上面配置源属性 -->
          <property name="dataSource" ref="dataSource"/>
           <!-- 指定实体的别名 -->
          <property name="typeAliasesPackage"  value="edu.nf.ch02.entity"/>
          <property name="mapperLocations" value="classpath:mapper/*.xml"/>
           <!-- 配置文件插件 -->
           <property name="plugins">
               <bean class="com.github.pagehelper.PageInterceptor">
                   <!-- 注入分页属性 -->
                   <property name="properties">
                       <props>
                           <!-- 数据库方言 -->
                           <prop key="helperDialect">mysql</prop>
                           <!-- 启用分页注解支持 -->
                           <prop key="supportMethodsArguments">true</prop>
                           <!-- 分页合理化 -->
                           <prop key="reasonable">true</prop>
                       </props>
                   </property>
               </bean>
           </property>
    </bean>

    <!-- 3 扫描dao接口包,这样会利用动态代理的机制在程序运行时创建所有dao接口的实现类 -->

       <mybatis:scan  base-package="edu.nf.ch02.dao"/>


</beans>

service中的impl

@RequiredArgsConstructor 注解作用是将一个无构造参数的值 在target包中自动创建一个构造方法,并不会显示在源代码中,只会显示在target中

@Service
/**
 * 当我们的参数没有构造方法时,此时.
 * @RequiredArgsConstructor注解会自动帮我们创建一个构造参数
 */
@RequiredArgsConstructor
public class CityServiceImpl implements CityService {

    private final CityDao cityDao;

    @Override
    public City getCityByName(String name) {
        return cityDao.getCityByName(name);
    }

    @Override
    public PageInfo<City> listCity(int pageNum, int pageSize) {
        List<City> list = cityDao.listCity(pageNum, pageSize);
        PageInfo<City> pageInfo = new PageInfo<>(list);
        return pageInfo;
    }
}

测试层的daima:

@Slf4j
public class Te {

    @Test
    public void  se(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        CityDao bean = context.getBean(CityDao.class);
        City c = bean.getCityByName("珠海");
        log.debug(c.toString());
        log.debug(c.getCityCode());
        log.debug(c.getCityName());
        log.debug(c.getProvince());
    }

    @Test
    public void  sa(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        CityDao bean = applicationContext.getBean(CityDao.class);
        bean.listCity(1,5).forEach(city -> log.debug(city.getCityName()));
    }

}

运行成功视图

测试1 

测试2

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值