Mybatis
1.MyBatis简介
- Java的持久层框架
- ORM(对象关系映射)框架
2.MyBatis简单使用
2.1 导包
2.2 配值MyBatis-Config.xml
2.3 配值UserMapper.xm
and id = #{id}
and name like '%${name}%'
insert into user(name) values (#{name});
delete from user where id=#{id}
update user set name = #{name} where id= #{id}
delete from user where id in
#{id}
insert into user (name) values
(#{user.name})
update user set name = #{name} WHERE id in
#{id}
2.4 抽取SqlSession用枚举
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();
}
}
2.5 具体实现类
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 findAll() {
List 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 ids) {
SqlSession sqlSession = SessionUtil.INSTANCE.getSqlSession();
sqlSession.delete("cn.itsource.dao.IUserDao.deleteBatch",ids);
sqlSession.commit();
}
@Override
public void addBatch(List 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 findByConditions(UserQuery uq) {
SqlSession sqlSession = SessionUtil.INSTANCE.getSqlSession();
List o = sqlSession.selectList("cn.itsource.dao.IUserDao.findByConditions", uq);
sqlSession.commit();
return o;
}
}
3 使用日志包
3.1 导包
3.2 log4j.properties 日志文件配置
# 日志输出级别 输出到控制
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
4 使用${id} 与 #{id}的区别
(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上面 其他情况下 就是使用#
5 细节
5.1 主键
有时候,我们保存一个数据,需要拿到主键的,做一些后续的操作
insert into t_user(name) values(#{name})