标签:ase sql 命名 参数类型 sel 有一个 classname static 级别
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 配置-->
<configuration>
<!--引入jdbc.propeties文件-->
<properties resource="jdbc.properties" />
<!-- 环境们 (很多环境的意思)
default:默认使用哪一个环境(必需对应一个环境的id)
-->
<!-- 取别名 typeAliases:配置别名
注:别名不区别大小写 -->
<typeAliases>
<!--单个类的配置-->
<!--<typeAlias type="cn.itsource.domain.User" alias="xx"/>-->
<!--以包的形式配置别名,别名就是类名-->
<package name="cn.itsource.domain" />
</typeAliases>
<environments default="development">
<!--
一个环境 id:为这个环境取唯一一个id名称
-->
<environment id="development">
<!--
事务管理 type:JDBC(支持事务)/MANAGED(什么都不做)
-->
<transactionManager type="JDBC" />
<!-- 数据源, 连接池 type(POOLED):MyBatis自带的连接池 -->
<dataSource type="POOLED">
<!-- 连接数据库的参数 -->
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 这个mappers代表的是相应的ORM映射文件 -->
<mappers>
<mapper resource="cn/itsource/domain/UserMapper.xml" />
</mappers>
</configuration>
<?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">
<!--
orm框架 sql的映射
namespace:命名空间 namespace路径+ id值
namespace怎么配置 包名.接口名
-->
<mapper namespace="cn.itsource.dao.IUserDao">
<!--公共sql抽取-->
<sql id="query">
<if test="id!= null">
and id = #{id}
</if>
<if test="name!= null">
and name like '%${name}%'
</if>
</sql>
<!--查询所有的方法-->
<select id="findAll" resultType="cn.itsource.domain.User">
select * from user
</select>
<!--查找一个的方法-->
<select id="findOne" parameterType="long" resultType="cn.itsource.domain.User">
select * from user where id = #{id};
</select>
<!--
添加的方法
useGeneratedKeys:使用主键
keyColumn:数据库id列
keyProperty:程序里面User类的属性
-->
<insert id="add" parameterType="cn.itsource.domain.User" useGeneratedKeys="true" keyColumn="id" keyProperty="id" >
insert into user(name) values (#{name});
</insert>
<!--
删除的方法
${id} 它使用 类里面属性 getId()
必须要有get方法
-->
<delete id="delete" parameterType="long">
delete from user where id=#{id}
</delete>
<!--这里参数类型使用了mybatis配置文件里面的别名xx ,因为配置的扫包,别名就是类名-->
<update id="update" parameterType="User">
update user set name = #{name} where id= #{id}
</update>
<!--批量删除-->
<delete id="deleteBatch" parameterType="list" >
delete from user where id in
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<!-- 批量添加-->
<insert id="addBatch" parameterType="list">
insert into user (name) values
<foreach collection="list" item="user" separator=",">
(#{user.name})
</foreach>
</insert>
<!--
批量修改
List<Long> ids = Arrays.asList(2L,9L,10L);
Map map = new HashMap();
map.put("name","123");
map.put("list",ids);
直接属性名就可以获取值
-->
<update id="updateBatch" parameterType="map">
update user set name = #{name} WHERE id in
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</update>
<!--高级查询方法-->
<select id="findByConditions" parameterType="cn.itsource.query.UserQuery" resultType="cn.itsource.domain.User">
select * from user
<!--注意这里用了一个where标签它会自动判断是否只有一个条件一个就不加and-->
<where>
<include refid="query"/>
</where>
</select>
</mapper>
package cn.itsource.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
public enum SessionUtil {
INSTANCE;
private static SqlSessionFactory sqlSessionFactory;
static {
Reader reader = null;
try {
//注意导包的类型
reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory= new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
//打印堆栈信息
e.printStackTrace();
throw new RuntimeException("解析配置文件出问题"+e.getMessage());
}
}
public SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
package cn.itsource.dao.impl;
import cn.itsource.dao.IUserDao;
import cn.itsource.domain.User;
import cn.itsource.query.UserQuery;
import cn.itsource.util.SessionUtil;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
import java.util.Map;
public class IUserDaoImpl implements IUserDao {
@Override
public List<User> findAll() {
List<User> users = SessionUtil.INSTANCE.getSqlSession().selectList("cn.itsource.dao.IUserDao.findAll");
return users;
}
@Override
public User findOne(Long id) {
User user = SessionUtil.INSTANCE.getSqlSession().selectOne("cn.itsource.dao.IUserDao.findOne",id);
return user;
}
@Override
public void add(User user) {
SqlSession sqlSession = SessionUtil.INSTANCE.getSqlSession();
sqlSession.insert("cn.itsource.dao.IUserDao.add", user);
sqlSession.commit();
}
@Override
public void update(User user) {
SqlSession sqlSession = SessionUtil.INSTANCE.getSqlSession();
sqlSession.update("cn.itsource.dao.IUserDao.update",user);
sqlSession.commit();
}
@Override
public void delete(Long id) {
SqlSession sqlSession = SessionUtil.INSTANCE.getSqlSession();
sqlSession.delete("cn.itsource.dao.IUserDao.delete",id);
sqlSession.commit();
}
@Override
public void deleteBatch(List<Long> ids) {
SqlSession sqlSession = SessionUtil.INSTANCE.getSqlSession();
sqlSession.delete("cn.itsource.dao.IUserDao.deleteBatch",ids);
sqlSession.commit();
}
@Override
public void addBatch(List<User> users) {
SqlSession sqlSession = SessionUtil.INSTANCE.getSqlSession();
sqlSession.insert("cn.itsource.dao.IUserDao.addBatch",users);
sqlSession.commit();
}
@Override
public void updateBatch(Map map) {
SqlSession sqlSession = SessionUtil.INSTANCE.getSqlSession();
sqlSession.update("cn.itsource.dao.IUserDao.updateBatch",map);
sqlSession.commit();
}
@Override
public List<User> findByConditions(UserQuery uq) {
SqlSession sqlSession = SessionUtil.INSTANCE.getSqlSession();
List<User> o = sqlSession.selectList("cn.itsource.dao.IUserDao.findByConditions", uq);
sqlSession.commit();
return o;
}
}
# 日志输出级别 输出到控制
log4j.rootLogger=ERROR, stdout
#log4j.rootLogger=NONE
log4j.logger.cn.itsource=TRACE
# 输出到控制台的配置信息
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
# 输出到控制台的 格式类
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
(1) $ {id} 找的类参数类的里面 getId这个方法,如果有 就不会报错,没有就会报错
(2) '# 占位符,$ 拼接字符串形式 -- 比较重要点
userMapper.xml
update t_user set name=${name} where id=#{id}
生成语句
update t_user set name=小秋秋 where id=?
$ 拼接字符串方式 --Statement --存在sql注入问题
'# 占位符 -- PreparedStatement
(3) 平时使用比较多还是 #{id}
(4) $一般使用在limit+orderby上面 其他情况下 就是使用#
有时候,我们保存一个数据,需要拿到主键的,做一些后续的操作
<insert id="save" parameterType="cn.itsource.domain.User"
useGeneratedKeys="true" keyColumn="id" keyProperty="id">
insert into t_user(name) values(#{name})
</insert>
标签:ase sql 命名 参数类型 sel 有一个 classname static 级别
原文地址:https://www.cnblogs.com/qdmpky/p/11979414.html