新建一个接口 SqlBaseMapper 封装常用的增删改查
public interface SqlBaseMapper { /** * 查询单条数据返回Map<String, Object> * * @param sql sql语句 * @return Map<String, Object> */ Map<String, Object> sqlSelectOne(String sql); /** * 查询单条数据返回Map<String, Object> * * @param sql sql语句 * @param value 参数 * @return Map<String, Object> */ Map<String, Object> sqlSelectOne(String sql, Object value); /** * 查询单条数据返回实体类型 * * @param sql sql语句 * @param resultType 具体类型 * @return 定义的实体类型 */ <T> T sqlSelectOne(String sql, Class<T> resultType); /** * 查询单条数据返回实体类型 * * @param sql sql语句 * @param value 参数 * @param resultType 具体类型 * @return 定义的实体类型 */ <T> T sqlSelectOne(String sql, Object value, Class<T> resultType); /** * 查询数据返回 * * @param sql sql语句 * @return List<Map < String, Object>> */ List<Map<String, Object>> sqlSelectList(String sql); /** * 查询数据返回 * * @param sql sql语句 * @param value 参数 * @return List<Map < String, Object>> */ List<Map<String, Object>> sqlSelectList(String sql, Object value); /** * 查询数据返回 * * @param sql sql语句 * @param resultType 具体类型 * @return List<T> */ <T> List<T> sqlSelectList(String sql, Class<T> resultType); /** * 查询数据返回 * * @param sql sql语句 * @param value 参数 * @param resultType 具体类型 * @return List<T> */ <T> List<T> sqlSelectList(String sql, Object value, Class<T> resultType); /** * 插入数据 * * @param sql sql语句 * @return int */ int sqlInsert(String sql); /** * 插入数据 * * @param sql sql语句 * @param value 参数 * @return int */ int sqlInsert(String sql, Object value); /** * 更新数据 * * @param sql sql语句 * @return int */ int sqlUpdate(String sql); /** * 更新数据 * * @param sql sql语句 * @param value 参数 * @return int */ int sqlUpdate(String sql, Object value); /** * 删除数据 * * @param sql sql语句 * @return int */ int sqlDelete(String sql); /** * 查询数据返回List<T> * * @param sql sql语句 * @param value 参数 * @return int */ int sqlDelete(String sql, Object value); }
新建一个SqlMapper 实现SqlBaseMapper接口
SqlMapper .sqlSession = sqlSessionFactory.openSession(.msUtils = <T> T getOne(List<T> (list.size() == 1 list.get(0 (list.size() > 1 TooManyResultsException("Expected one result (or null) to be returned by selectOne(), but found: " + Map<String, Object><Map<String, Object>> list = (Map) Map<String, Object><Map<String, Object>> list = (Map) <T> T sqlSelectOne(String sql, Class<T><T> list = <T> T sqlSelectOne(String sql, Object value, Class<T><T> list = List<Map<String, Object>>= List<Map<String, Object>><?> parameterType = value != ? value.getClass() : = <T> List<T> sqlSelectList(String sql, Class<T> (resultType == = = <T> List<T> sqlSelectList(String sql, Object value, Class<T><?> parameterType = value != ? value.getClass() : (resultType == = = = <?> parameterType = value != ? value.getClass() : = = <?> parameterType = value != ? value.getClass() : = = <?> parameterType = value != ? value.getClass() : = .configuration =.languageDriver == "." .configuration.hasStatement(msId, newSelectMappedStatement(String msId, SqlSource sqlSource, Class<?>= ( MappedStatement.Builder(.configuration, msId, sqlSource, SqlCommandType.SELECT)).resultMaps( ArrayList<ResultMap>.add(( org.apache.ibatis.mapping.ResultMap.Builder(com.culturalCenter.placeManage.mapper.SqlMapper.MSUtils..configuration, "defaultResultMap", resultType, ArrayList(0 = ( MappedStatement.Builder(.configuration, msId, sqlSource, sqlCommandType)).resultMaps( ArrayList<ResultMap>.add(( org.apache.ibatis.mapping.ResultMap.Builder(com.culturalCenter.placeManage.mapper.SqlMapper.MSUtils..configuration, "defaultResultMap", Integer.TYPE, ArrayList(0= (= StaticSqlSource(.newSelectMappedStatement(msId, sqlSource, Map. String selectDynamic(String sql, Class<?>= .newMsId(sql + (= .languageDriver.createSqlSource(.newSelectMappedStatement(msId, sqlSource, Map. String select(String sql, Class<?>= .newMsId(resultType + (= StaticSqlSource( String selectDynamic(String sql, Class<?> parameterType, Class<?>= .newMsId(resultType + sql + (= .languageDriver.createSqlSource(= (= StaticSqlSource( String insertDynamic(String sql, Class<?>= .newMsId(sql + (= .languageDriver.createSqlSource(= (= StaticSqlSource( String updateDynamic(String sql, Class<?>= .newMsId(sql + (= .languageDriver.createSqlSource(= (= StaticSqlSource( String deleteDynamic(String sql, Class<?>= .newMsId(sql + (= .languageDriver.createSqlSource(
然后做一个 数据连接工厂类
SqlSessionFactoryConfig
/** * @author chaild * @Date 2020年6月23日18:25:22 * 创建SQL连接工厂类 * */@Configurationpublic class SqlSessionFactoryConfig { @javax.annotation.Resource DruidDataSource dataSource; @Bean @Primary public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource);//更多参数请自行注入 bean.setPlugins(new Interceptor[]{new SqlInterceptor()}); Resource[] resources = new PathMatchingResourcePatternResolver() .getResources("classpath*:mapper/*.xml"); bean.setMapperLocations(resources); return bean.getObject(); } }
使用示例:
@Autowired private SqlMapper sqlMapper; ###selectList//查询,返回List<Map>List<Map<String, Object>> list = sqlMapper.selectList("select * from country where id < 11");//查询,返回指定的实体类List<Country> countryList = sqlMapper.selectList("select * from country where id < 11", Country.class);//查询,带参数countryList = sqlMapper.selectList("select * from country where id < #{id}", 11, Country.class);//复杂点的查询,这里参数和上面不同的地方,在于传入了一个对象Country country = new Country(); country.setId(11); countryList = sqlMapper.selectList("<script>" + "select * from country " + " <where>" + " <if test=\"id != null\">" + " id < #{id}" + " </if>" + " </where>" + "</script>", country, Country.class); ##复杂查询使用map传入参数 Map<String,String> map=new HashMap<>(); map.put("id","21321312312312312"); map.put("status","1"); sqlMapper.sqlSelectList("select * from tb_admin where id=#{id} and status=#{status}",map,Admin.class); ###selectOne 查询单条数据 Map<String, Object> map = sqlMapper.selectOne("select * from country where id = 35"); map = sqlMapper.selectOne("select * from country where id = #{id}", 35); Country country = sqlMapper.selectOne("select * from country where id = 35", Country.class); country = sqlMapper.selectOne("select * from country where id = #{id}", 35, Country.class); ###insert,update,delete ###insert 插入数据int result = sqlMapper.insert("insert into country values(1921,'天朝','TC')"); Country tc = new Country(); tc.setId(1921); tc.setCountryname("天朝"); tc.setCountrycode("TC");//注意这里的countrycode和countryname故意写反的result = sqlMapper.insert("insert into country values(#{id},#{countrycode},#{countryname})" , tc); ###update 更新使用 result = sqlMapper.update("update country set countryname = '天朝' where id = 35"); tc = new Country(); tc.setId(35); tc.setCountryname("天朝");int result = sqlMapper.update("update country set countryname = #{countryname}" + " where id in(select id from country where countryname like 'A%')", tc); ##delete 删除使用 result = sqlMapper.delete("delete from country where id = 35"); result = sqlMapper.delete("delete from country where id = #{id}", 35);
如果实现 了 Interceptor 类进行SQL二次处理封装,会报二次编译的问题
评论区