1、spring除了注解还有什么方法创建bean。除了xml还有其他方式吗
2、在项目中什么时候用xml,什么时候用注解。
3、用Mybatis访问数据库的开发流程是什么?
4、在mybatis里面如何进行批量操作?
5、用批量操作有什么好处
6、怎么去避免sql注入,什么场景下我们用$符号?
1、spring除了注解还有什么方法创建bean。除了xml还有其他方式吗
方法1、实现ImportSelector接口
selectImports方法的返回值为需要创建Bean的类名称,这里创建User类。
@Slf4j
public class MyImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
log.info("MyImportSelector selectImports ...");
return new String[]{
User.class.getName()};
}
}
方法2、实现ImportBeanDefinitionRegistrar接口
beanDefinitionRegistry.registerBeanDefinition用于设置需要创建Bean的类的名称,这里创建Hourse类。
@Slf4j
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
log.info("MyImportBeanDefinitionRegistrar registerBeanDefinitions .....");
BeanDefinition beanDefinition = new RootBeanDefinition(House.class.getName());
beanDefinitionRegistry.registerBeanDefinition(House.class.getName(),beanDefinition);
}
}
2、在项目中什么时候用xml,什么时候用注解。
面对一个类,需要交给spring来进行管理
1、第三方的,xml
2、自己开发的,@注解
我们在开发中使用一些第三方的库,我们需要spring帮助我们管理,有时需要一些参数的传递,我们只能用xml配置。
例如:spring整合mybatis,我们需要使用SqlSessionFactoryBean类,但这个类需要数据源和配置文件。
3、用Mybatis访问数据库的开发流程是什么?
1、读取配置文件
2、创建SqlSessionFactory
3、开启SqlSession
4、获取操作接口
5、访问数据库
6、关闭资源
4、在mybatis里面如何进行批量操作?
1、批量插入操作
<insert id="insertBatch" parameterType="java.utils.List">
insert into tableName(xxx,xxx,xxx)
values
<foreach collection="listxxx" item="item" separator=",">
(#{item.xxx},#{item.xxx},#{item.xxxx})
</foreach>
/*
collection的属性值为接口中对应的参数名称
(#{item.xxx},#{item.xxx},#{item.xxx})
通过属性的方式取得对应的值,注意小括号的使用
*/
</insert>
2、批量更新操作
<update id="batchUpdate" parameterType="java.util.List">
<foreach collection="list" index="index" item="item" separator=";">
update t_demo_user set
<if test="item.userName!=null">
user_name=#{item.userName},
</if>
<if test="item.gender!=null">
gender=#{item.gender}
</if>
where user_id=#{item.userId}
</foreach>
</update>
5、用批量操作有什么好处
并不是每一次网络传输都非常稳定,中途可能会遇到丢包等一系列问题,而用批量查询代替for循环单个查询,这样做的好处是,我们可以减少网络通信的次数,一定程度上可以增加整个系统的健壮性。
6、怎么去避免sql注入,什么场景下我们用$符号?
#{}:#代表占位符,用来传递参数;
${}:$用来拼接sql语句的,如把数据库中的表名作为参数拼接在 sql 语句中,必须使用 $
mapper接口:
//@Param 注解的作用如下
//mapper接口中 ,给String tableName参数 起个名字叫tableName1
// 这样mapper.xml 中 #{tableName1} 和${tableName1}可以拿到参数 tableName 的值
public List<User> findUserByTableName(@Param("tableName1") String tableName);
xml文件
<select id="findUserByTableName" resultType="User">
<!--SELECT * from #{tableName1} 运行会报错,编译后sql语句中含有引号,sql语句错误-->
SELECT * from ${tableName1}
</select>