科技服务网站建设方案,贵州省高层建筑信息平台,国外服务器地址ip,淘客必须做网站注意点#xff1a;增、删、改操作需要提交事务#xff01; 为了规范操作#xff0c;在SQL的配置文件中#xff0c;我们尽量将Parameter参数和resultType都写上#xff01; 编写Mapper接口类 import com.da.pojo.User;
import java.util.List;
public interface UserMapper… 注意点增、删、改操作需要提交事务 为了规范操作在SQL的配置文件中我们尽量将Parameter参数和resultType都写上 编写Mapper接口类 import com.da.pojo.User;
import java.util.List;
public interface UserMapper {ListUser selectUser();
} 编写Mapper.xml配置文件 ?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.da.dao.UserMapperselect idselectUser resultTypecom.da.pojo.Userselect * from user/select
/mapper select select标签是mybatis中最常用的标签之一select语句有很多属性可以详细配置每一条SQL语句 SQL语句返回值类型。传入SQL语句的参数类型 。命名空间中唯一的标识符接口中的方法名与映射文件中的SQL语句ID 一一对应idparameterTyperesultType 在UserMapper中添加对应方法 public interface UserMapper {//查询全部用户ListUser selectUser();//根据id查询用户User selectUserById(int id);
} 在UserMapper.xml中添加Select语句 select idselectUserById resultTypecom.da.pojo.Userselect * from user where id #{id}
/select 在UserMapper接口中添加对应的方法 //添加一个用户
int addUser(User user); 在UserMapper.xml中添加insert语句 insert idaddUser parameterTypecom.da.pojo.Userinsert into user (id,name,pwd) values (#{id},#{name},#{pwd})
/insert //修改一个用户
int updateUser(User user); update idupdateUser parameterTypecom.da.pojo.Userupdate user set name#{name},pwd#{pwd} where id #{id}
/update 根据id删除一个用户 //根据id删除用户
int deleteUser(int id); 编写对应的配置文件SQL delete iddeleteUser parameterTypeintdelete from user where id #{id}
/delete select * from foo where bar like #{value}select * from foo where bar like %#{value}% configuration配置properties属性settings设置typeAliases类型别名typeHandlers类型处理器objectFactory对象工厂plugins插件environments环境配置environment环境变量transactionManager事务管理器dataSource数据源databaseIdProvider数据库厂商标识mappers映射器
!-- 注意元素节点的顺序顺序不对会报错 -- environments defaultdevelopmentenvironment iddevelopmenttransactionManager typeJDBCproperty name... value...//transactionManagerdataSource typePOOLEDproperty namedriver value${driver}/property nameurl value${url}/property nameusername value${username}/property namepassword value${password}//dataSource/environment
/environments 子元素节点environment 具体的一套环境通过设置id进行区别id保证唯一 子元素节点transactionManager - [ 事务管理器 ] !-- 语法 --
transactionManager type[ JDBC | MANAGED ]/ 子元素节点数据源dataSource dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。数据源是必须配置的。 type[UNPOOLED|POOLED|JNDI] unpooled这个数据源的实现只是每次被请求时打开和关闭连接。pooled这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来 , 这是一种使得并发 Web 应用快速响应请求的流行处理方式。jndi这个数据源的实现是为了能在如 Spring 或应用服务器这类容器中使用容器可以集中或在外部配置数据源然后放置一个 JNDI 上下文的引用。数据源也有很多第三方的实现比如dbcpc3p0druid等等…. Mapper文件 ?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.da.mapper.UserMapper
/mapper namespace中文意思命名空间作用如下 namespace的命名必须跟某个接口同名接口中的方法与映射文件中sql语句id应该一一对应 namespace和子元素的id联合保证唯一 , 区别不同的mapper绑定DAO接口namespace命名规则 : 包名类名 MyBatis 的真正强大在于它的映射语句这是它的魔力所在。由于它的异常强大映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比会立即发现省掉了将近 95% 的代码。MyBatis 为聚焦于 SQL 而构建以尽可能地减少麻烦。 db.properties drivercom.mysql.jdbc.Driver
urljdbc:mysql://localhost:3306/mybatis?useSSLtrueuseUnicodetruecharacterEncodingutf8
usernameroot
password123456 typeAliases优化 !--配置别名,注意顺序--
typeAliases
typeAlias typecom.da.pojo.User aliasUser/
/typeAliases 无论是 MyBatis 在预处理语句PreparedStatement中设置一个参数时还是从结果集中取出一个值时 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。 可以重写类型处理器或创建自己的类型处理器来处理不支持的或非标准的类型。 MyBatis 每次创建结果对象的新实例时它都会使用一个对象工厂ObjectFactory实例来完成。默认的对象工厂需要做的仅仅是实例化目标类要么通过默认构造方法要么在参数映射存在的时候通过有参构造方法来实例化。如果想覆盖对象工厂的默认行为则可以通过创建自己的对象工厂来实现。 作用域理解 SqlSessionFactoryBuilder 的作用在于创建 SqlSessionFactory创建成功后SqlSessionFactoryBuilder 就失去了作用所以它只能存在于创建 SqlSessionFactory 的方法中而不要让其长期存在。因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域也就是局部方法变量。SqlSessionFactory 可以被认为是一个数据库连接池它的作用是创建 SqlSession 接口对象。因为 MyBatis 的本质就是 Java 对数据库的操作所以 SqlSessionFactory 的生命周期存在于整个 MyBatis 的应用之中所以一旦创建了 SqlSessionFactory就要长期保存它直至不再使用 MyBatis 应用所以可以认为 SqlSessionFactory 的生命周期就等同于 MyBatis 的应用周期。由于 SqlSessionFactory 是一个对数据库的连接池所以它占据着数据库的连接资源。如果创建多个 SqlSessionFactory那么就存在多个数据库连接池这样不利于对数据库资源的控制也会导致数据库连接资源被消耗光出现系统宕机等情况所以尽量避免发生这样的情况。因此在一般的应用中我们往往希望 SqlSessionFactory 作为一个单例让它在应用中被共享。所以说 SqlSessionFactory 的最佳作用域是应用作用域。如果说 SqlSessionFactory 相当于数据库连接池那么 SqlSession 就相当于一个数据库连接Connection 对象可以在一个事务里面执行多条 SQL然后通过它的 commit、rollback 等方法提交或者回滚事务。所以它应该存活在一个业务请求中处理完整个请求后应该关闭这条连接让它归还给 SqlSessionFactory否则数据库资源就很快被耗费精光系统就会瘫痪所以用 try…catch…finally… 语句来保证其正确关闭。所以 SqlSession 的最佳的作用域是请求或方法作用域。 PreAuthorize(ss.hasPermi(system:good:list))
GetMapping(/list)
public TableDataInfo list()
{startPage();ListGoodsGood list goodsGoodService.selectGoodsGoodList();return getDataTable(list);
} el-col :span1.5el-buttontypewarningplainiconel-icon-downloadsizeminiclickhandleExportv-hasPermi[goods:good:export]导出/el-button
/el-colhandleExport() {this.download(goods/good/export, {...this.queryParams}, good_${new Date().getTime()}.xlsx)
} image.png public class User {private int id; //idprivate String name; //姓名private String password; //密码和数据库不一样//构造//set/get//toString()
} //根据id查询用户
User selectUserById(int id); select idselectUserById resultTypeuserselect * from user where id #{id}
/selectselect idselectUserById resultTypeUserselect id , name , pwd as password from user where id #{id}
/select Test
public void testSelectUserById() {SqlSession session MybatisUtils.getSession(); //获取SqlSession连接UserMapper mapper session.getMapper(UserMapper.class);User user mapper.selectUserById(1);System.out.println(user);session.close();
} 使用结果集映射-ResultMap resultMap idUserMap typeUser!-- id为主键 --id columnid propertyid/!-- column是数据库表的列名 , property是对应实体类的属性名 --result columnname propertyname/result columnpwd propertypassword/
/resultMap
select idselectUserById resultMapUserMapselect id , name , pwd from user where id #{id}
/select 自动映射在 MyBatis 中扮演着非常重要且强大的角色其中 resultMap 元素更是起到了关键作用。使用它可以让繁琐的 JDBC ResultSet 数据提取代码中解放出来甚至对于连接复杂语句的映射代码一份 resultMap 也能代替数千行的代码。 ResultMap 的设计思想非常巧妙简单语句无需配置显式的结果映射而对于稍微复杂一点的语句只需要描述它们之间的关系即可。 select idselectUserById resultTypemapselect id , name , pwd from user where id #{id}
/select 将所有的列映射到 HashMap 的键上这由 resultType 属性指定。 select idselectUserById resultMapUserMapselect id , name , pwd from user where id #{id}
/selectresultMap idUserMap typeUser!-- id为主键 --id columnid propertyid/!-- column是数据库表的列名 , property是对应实体类的属性名 --result columnname propertyname/result columnpwd propertypassword/
/resultMap 加群联系作者vxxiaoda0423 仓库地址https://github.com/webVueBlog/JavaGuideInterview