首页
统计
4K壁纸
留言
Search
1
自动采集头像+壁纸+流量主小程序
851 阅读
2
【腾讯云】低价服务器活动和新用户活动
494 阅读
3
Spring Di依赖注入环境
377 阅读
4
springboot
323 阅读
5
Spring MVC 结构体系
299 阅读
技术分享
学习笔记
jsp
Maven
Mybatis
Spring
Hibernate
系统源码
网站源码
APP源码
微信程序
小程序
登录
/
注册
Search
标签搜索
学习笔记
Hibernate
小程序
Mybatis
源码
教程
笔记
Ajax
微信
活动
福利
MyEclipse 10
笔记fen'x
壁纸小程序
微信程序
HQL
笔记分享
Mybatis-Plus
小新
累计撰写
44
篇文章
累计收到
42
条评论
首页
栏目
技术分享
学习笔记
jsp
Maven
Mybatis
Spring
Hibernate
系统源码
网站源码
APP源码
微信程序
小程序
页面
统计
4K壁纸
留言
搜索到
8
篇与
Mybatis
的结果
2022-05-04
Mybatis-Plus 笔记总结
快速入门搭建步骤创建数据库mybatis_pluscreate database mybatis_plus use mybatis_plus CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (id) ); INSERT INTO user (id, name, age, email) VALUES (1, 'Jone', 18, 'test1@baomidou.com'), (2, 'Jack', 20, 'test2@baomidou.com'), (3, 'Tom', 28, 'test3@baomidou.com'), (4, 'Sandy', 21, 'test4@baomidou.com'), (5, 'Billie', 24, 'test5@baomidou.com');编写项目这里是spring-boot 框架导入依赖<!--数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!--spring-plus的依赖--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency>导入了没有batis-plus 就不用导入mybatis了 ,这样容易冲突连接数据库 ! 和mybatis相同(properties文件)spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?useSSL=false&useUnicode=true&characterEncoding=utf-8 spring.datasource.username=root spring.datasource.password=root创建pojo实体类package com.xin.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class User { private Long id; private String name; private Integer age; private String email; }Mapper接口package com.xin.Mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xin.pojo.User; import org.apache.ibatis.annotations.Mapper; @Mapper //在对应的Mapper上继承基本的类 BaseMapper public interface UserMapper extends BaseMapper<User> { //所以的增删改查已经完成了! }测试_使用:@SpringBootTest class MybatisPlus01ApplicationTests { //所有的方法来源它的父类BaesMapper @Autowired private UserMapper userMapper; @Test void contextLoads() { //查询全部用户 List<User> userList = userMapper.selectList(null); for (User user : userList) { System.out.println(user); } } }配置日志为了查看执行的SQL 语句 ,所以我们必须看日志# 日志配置 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImplCURD扩展 /*测试添加方法*/ @Test public void textinsert(){ User user = new User(); user.setName("迪迦"); user.setAge(21); user.setEmail("123131314@qq.com"); int i = userMapper.insert(user); //自动生成ID System.out.println(i); }
2022年05月04日
12 阅读
0 评论
1 点赞
动态SQL
基于OGNL表达式完成多条件查询等逻辑实现用于实现动态SQL的元素主要有iftrimwheresetchoose(when.otherwise)foreach /** * 动态sql查询 * @return */ List<User> selBylike(User user);<select id="selBylike" resultType="User"> select * from smbms_user where 1=1 <if test="userRole!=null and userRole!=0"> and userRole = #{userRole} </if> <if test="userName != null"> and userName like concat('%',#{userName},'%'); </if> </select>@Test public void selBylike(){ SqlSession openSession = MybatisUtil.openSession(); UserMapper mapper = openSession.getMapper(UserMapper.class); User user = new User(); user.setUserRole(3); user.setUserName("张"); List<User> selBylike = mapper.selBylike(user); for (User user2 : selBylike) { System.out.println(user2); } }where简化SQL语句中where条件判断智能处理and和or<select id="selBylike" resultType="User"> select * from smbms_user <!-- where 1=1 --> <where> <if test="userRole!=null and userRole!=0"> and userRole = #{userRole} </if> <if test="userName != null"> and userName like concat('%',#{userName},'%'); </if> </where> </select>set 去逗号演示代码:<update id="upd"> update smbms_user <set> <if test="userCode!=null and userCode!=0"> userCode = #{userCode}, </if> <if test="userName!=null"> userName = #{userName}, </if> <if test="userPassword!=null"> userPassword = #{userPassword}, </if> <if test="userRole!=null and userCode!=0"> userRole = #{userRole}, </if> </set> where id = #{id} </update>trim属性 Prefix (加前缀)suffix (加后缀)prefixOverrides (去前缀)suffixOverrides (去后缀)更灵活地去除多余关键字替换where和set<update id="upd"> update smbms_user <trim prefix="set" suffixOverrides="," suffix="where id=#{id}"> <if test="userCode!=null and userCode!=0"> userCode = #{userCode}, </if> <if test="userName!=null"> userName = #{userName}, </if> <if test="userPassword!=null"> userPassword = #{userPassword}, </if> <if test="userRole!=null and userCode!=0"> userRole = #{userRole}, </if> </trim> </update><select id="selBylike" resultType="User"> select * from smbms_user <trim prefix="where" prefixOverrides="and|or"> <if test="userRole!=null and userRole!=0"> and userRole = #{userRole} </if> <if test="userName != null"> and userName like concat('%',#{userName},'%'); </if> </trim> </select>foreach迭代一个集合,通常用于in条件属性itemindexcollection:必须指定listarraymap-keyopenseparatorclose/** * 使用集合查询 * @return */ List<User> selByidList(@Param("idlist")List<Integer> idlist);<select id="selByidList" resultType="User"> select * from smbms_user <foreach collection="idlist" item="idOne" open="where id in(" close=")" separator=","> #{idOne} </foreach> </select>分页查询/** * 分页查询 * @param start * @param pageSize * @return */ List<User> selBypage(@Param("start")int start,@Param("pageSize")int pageSize);<select id="selBypage" resultType="USer"> select * from smbms_user limit #{start},#{pageSize} </select>@Test //测试类 public void selBypage(){ SqlSession session = MybatisUtil.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); List<User> selectList = mapper.selBypage((1-1)*5,5); for (User userss : selectList) { System.out.println(userss); } }
2021年12月27日
38 阅读
0 评论
0 点赞
Mybatis 映射文件(MyEclipse 10)
准备工作导入jar包到lib包里面log4j-1.2.16.jarmybatis-3.2.2-sources.jarmybatis-3.2.2.jarmysql-connector-java-5.1.0-bin.jarMybatis配置头部信息//这是放在Mybatis-config.xml头部的 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">配置步骤以下步骤顺序不标准!自己随意写的 仅供参考创建资源文件夹resources 文件下:mysqlConn.propertiesMybatis-config.xml{tabs}{tabs-pane label="mysqlConn.properties"}driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/表名?characterEncoding=utf-8 username=账号 password=密码{/tabs-pane}{tabs-pane label="Mybatis-config.xml"}<?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> <!-- 设置配置参数,后续使用${参数名}获取该参数 --> <properties resource="mysqlConn.properties"> <!-- <property name="url" value="jdbc:mysql://localhost:3306/smbms?characterEncoding=utf-8"/> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="username" value="root"/> <property name="password" value="root"/> --> </properties> <!-- 配置mybatis的全局属性 --> <settings> <!-- 设置自动映射级别为最高层级别 --> <setting name="autoMappingBehavior" value="FULL"/> <setting name="logImpl" value="LOG4J"/> </settings> <!-- 配置pojo全类名别名 --> <typeAliases> <!-- 指定实体类的包,其包下所有类名则均成为类型别名 --> <package name="com.xyh.pojo"/> </typeAliases> <!-- 配置连接的数据库运行环境 --> <environments default="env1"> <environment id="env1"> <!-- 环境的事务管理机制 --> <transactionManager type="JDBC"/> <!-- 配置连接数据库的数据源 --> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 配置mapper映射文件所在位置 --> <mappers> <mapper resource="com/xyh/dao/UserMapper.xml"/> </mappers> </configuration>{/tabs-pane}{/tabs}代码编写创建com.xxx.utilMybatisUtil.java{collapse}{collapse-item label="MybatisUtil.java" close}package com.xyh.util; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MybatisUtil { private static SqlSessionFactory sf; static{ try { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); //创建Sqlsession工厂的塔吊 sf = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static SqlSession openSession(){ //调用session工厂的opensession方法获得与数据库的会话 return sf.openSession(); } public static SqlSession openSession(boolean b){ //调用session工厂的opensession方法获得与数据库的会话 return sf.openSession(b); } } {/collapse-item}{/collapse}创建com.xxx.daoUserMapper.java (接口)UserMapper.xml (原JDBC的Impl){collapse}{collapse-item label="UserMapper.java" close} package com.xyh.dao; import java.util.List; import org.apache.ibatis.annotations.Param; import com.xyh.pojo.User; public interface UserMapper { /** * 过呢据id删除 * @param id * @return */ int del(int id); /** * 添加数据 * @param user * @return */ int add(User user); /** * 使用对象查询 * @return */ List<User> selUser(User user); /** * 查询全部 * @return */ List<User> selUserlist(); /** * 表连接查询 * @return */ List<User> sellikeByMap(User user); /** * 模糊查询 * @param userName * @param userRole * @return */ List<User> sellikeByuname(@Param("userName") String userName,@Param("userRole") int userRole); } {/collapse-item}{collapse-item label="MybatisUtil.xml" close}<?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"> <mapper namespace="com.xyh.dao.UserMapper"> <select id="selUserlist" resultType="com.xyh.pojo.User"> select * from smbms_user </select> <delete id="del"> delete from smbms_user where id =#{id} </delete> <resultMap type="User" id="userMap"> <!-- 映射id的标签 --> <id property="id" column="uid"/> <!-- 映射其他列的标签 --> <association property="role" javaType="Role"> <id property="id" column="rid"/> </association> <collection property="AddressList" ofType="Address"> <id property="id" column="aid"/> </collection> <!-- <result property="RoleName" column="roleName"/> --> </resultMap> <select id="sellikeByMap" resultMap="userMap"> select u.id uid,r.id rid,u.userCode,u.userName,u.userPassword,r.roleName,r.roleCode,a.id aid ,a.addressDesc,a.postCode,a.contact from smbms_user u inner join smbms_role r on r.id=u.userRole inner join smbms_address a on a.userId =u.id where username like concat('%',#{userName},'%') and userrole=#{userRole} </select> <insert id="add"> insert into smbms_user(usercode,userpassword,username,userrole) value(#{userCode},#{userPassword},#{userName},#{userRole}) </insert> <select id="selUser" resultType="User"> select * from smbms_user where userName like concat('%',#{userName},'%') and userRole=#{userRole} </select> <select id="sellikeByuname" resultType="User"> select * from smbms_user where userName like concat('%',#{userName},'%') and userRole=#{userRole} </select> </mapper>{/collapse-item}{/collapse}创建com.xxx.pojoUser.java(实体类){collapse}{collapse-item label="User.java" close}package com.xyh.pojo; import java.util.Date; import java.util.List; public class User { private List<Address> AddressList; public List<Address> getAddressList() { return AddressList; } public void setAddressList(List<Address> addressList) { AddressList = addressList; } private Role role; public Role getRole() { return role; } public void setRole(Role role) { this.role = role; } private int id; private String userRoleName; private String userCode; private String userName; private String userPassword; private int gender; private Date birthday; private String phone; private String address; private int userRole; private String createdBy; private String creationDate; private String modifyBy; private String modifyDate; public String getUserRoleName() { return userRoleName; } public void setUserRoleName(String userRoleName) { this.userRoleName = userRoleName; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserCode() { return userCode; } public void setUserCode(String userCode) { this.userCode = userCode; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } public int getGender() { return gender; } public void setGender(int gender) { this.gender = gender; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getUserRole() { return userRole; } public void setUserRole(int userRole) { this.userRole = userRole; } public String getCreatedBy() { return createdBy; } public void setCreatedBy(String createdBy) { this.createdBy = createdBy; } public String getCreationDate() { return creationDate; } public void setCreationDate(String creationDate) { this.creationDate = creationDate; } public String getModifyBy() { return modifyBy; } public void setModifyBy(String modifyBy) { this.modifyBy = modifyBy; } public String getModifyDate() { return modifyDate; } public void setModifyDate(String modifyDate) { this.modifyDate = modifyDate; } public User() { super(); } @Override public String toString() { return "User [AddressList=" + AddressList + ", role=" + role + ", id=" + id + ", userRoleName=" + userRoleName + ", userCode=" + userCode + ", userName=" + userName + ", userPassword=" + userPassword + ", gender=" + gender + ", birthday=" + birthday + ", phone=" + phone + ", address=" + address + ", userRole=" + userRole + ", createdBy=" + createdBy + ", creationDate=" + creationDate + ", modifyBy=" + modifyBy + ", modifyDate=" + modifyDate + "]"; } } {/collapse-item}{/collapse}测试代码单独创建test测试资源文件包名:测试哪个dao包就写那个 如:com.xxx.dao.test创建UserMapperTest.java{collapse}{collapse-item label="UserMapperTest.java" close}package com.xyh.dao.test; import java.io.IOException; import java.io.InputStream; import java.util.List; 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 org.junit.Test; import com.xyh.dao.UserMapper; import com.xyh.pojo.User; import com.xyh.util.MybatisUtil; public class UserMapperTest { @Test public void sellike(){ SqlSession session = MybatisUtil.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = new User(); user.setUserName("张"); user.setUserRole(3); List<User> selectList = mapper.selUser(user); for (User userss : selectList) { System.out.println(userss); } } @Test public void likeMap(){ SqlSession session = MybatisUtil.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = new User(); user.setUserName("管理"); user.setUserRole(1); List<User> sellikeByMap = mapper.sellikeByMap(user); for (User users : sellikeByMap) { System.out.println(users); } } @Test public void del(){ SqlSession session = MybatisUtil.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); /*User user = new User(); user.setUserName("张"); user.setUserRole(3);*/ int count = mapper.del(20); System.out.println(count); session.commit(); } @Test public void add(){ SqlSession session = MybatisUtil.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = new User(); user.setUserCode("123"); user.setUserName("张浩"); user.setUserPassword("21243"); user.setUserRole(3); int count = mapper.add(user); System.out.println(count); session.commit(); } @Test public void sellikeByuname(){ SqlSession session = MybatisUtil.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); List<User> selectList = mapper.sellikeByuname("张",3); for (User user : selectList) { System.out.println(user); } } @Test public void testsel() throws IOException { SqlSession session = MybatisUtil.openSession(); //调用session中查询集合方法,传入mapper命名空间,查询语句的id UserMapper mapper = session.getMapper(UserMapper.class); List<User> selectList = mapper.selUserlist(); for (User user : selectList) { System.out.println(user); } } } {/collapse-item}{/collapse}resultMapresultMap属性id : resultMap的唯一标识type: java实体类resultMap子元素id: 一般对应数据库中该行的主题id,设置此项可提高MyBatis性能result:映射到javaBean的某个 "复杂类型" 属性,比如javaBean类collection:映射到javaBean的某个,复杂类型 属性,比如集合 <resultMap type="User" id="userMap"> <!-- 映射id的标签 --> <id property="id" column="uid"/> <!--映射对象--> <association property="role" javaType="Role"> <id property="id" column="rid"/> </association> <!--映射集合:List--> <collection property="AddressList" ofType="Address"> <id property="id" column="aid"/> </collection> <!-- 映射其他列的标签 --> <!-- <result property="RoleName" column="roleName"/> --> </resultMap> association复杂的类型关联,一对一 内部嵌套: 映射一个嵌套javaBean属性 属性: property:映射数据库列的实体对象的属性javaType:完整java类名或者别名resultMap:引用外部resultMap子元素idresultproperty:映射数据库列的实体对象的属性column:数据库列名或者别名collection复杂的类型关联,一对多内部嵌套:映射一个嵌套结果集到一个列表属性: property:映射数据库列的实体对象的属性ofType:完整java类名或者别名或者别名(集合所包括的类型)resultMap:引用外部resultMap子元素idresultproperty:映射数据库列的实体对象的属性column:数据库列名或者别名缓存Mybatis缓存一级缓存二级缓存二级缓存的配置MyBatis的全局cache配置<settings> <setting name="cacheEnabled" value="true"/> </settings>在Mapper XML文件中设置缓存,默认情况下是没有开启缓存的<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>在Mapper XMl文件配置支持cache后,如果需要对个别查询进行调整,可以单独设置设置cache
2021年12月24日
122 阅读
0 评论
0 点赞
2021-11-07
5.解决属性名和字段名不一致的问题
数据库中的字段 新建一个项目,可以拷贝之前的,测试实体类字段不一致的情况public class User { private int id; private String name; private String password; }测试出现问题 解决方法:起别名 <select id="getidUser" resultType="com.xyh.pojo.User" parameterType="int"> select id,name,pwd as password from user where id = #{id} </select>
2021年11月07日
40 阅读
0 评论
1 点赞
2021-11-06
4、配置解析
1.核心配置文件mybatis-config.xmlMyBatis的配置文件包含了会深深影响MyBatis行为的设置和属性信息configuration(配置) properties(属性) settings(设置) typeAliases(类型别名) typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境配置) environment(环境变量) transactionManager(事务管理器) dataSource(数据源) databaseIdProvider(数据库厂商标识) mappers(映射器)code here...2.环境配置(environments)MyBatis 可以配置成适应多种环境 不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。学会使用配置多套运行环境 Mybatis默认的事务管理器是JDBC ,连接池:POOLED3.属性(properties)我们可以通过properties属性来实现应用配置文件这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。【db.properties】编写一个配置文件db.propertiesdriver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8 username=root password=root在核心配置文件中引入<!--引入外部配置文件--> <properties resource="db.properties"> <property name="username" value="root"/> <property name="pwd" value="root"/> </properties>可以直接引入外部文件可以在其中增加一些属性配置如果两个文件有同一个字段,优先使用外部配置文件4.类型别名(typeAliases)类型别名是为java类型设置一个短的名字存在的意义仅在于用来减少类的完全限定名的冗余 <!--可以给实体类起别名--> <typeAliases> <typeAlias typt="com.xyh.pojo.User" alias="User"/> </typeAliases>也可以指定一个包名,MyBatis会在报名下面搜索需要的javaBean,比如:扫描实体类的包,它的默认别名就为这个类的 类名,首字母小写! <typeAliases> <package name="com.xyh.pojo"/> </typeAliases>在实体类比较少的时候,使用第一种方式如果实体类十分多,建议使用第二种。第一种可以DIY别名,第二种则不行,如果非要改,需要在在实体上增加注解@Alias("user") public class User {}5.设置这是MyBatis中极为重要的调整设置,他们会改变MyBatis的运行时行为设置名描述有效值logImpl指定 MyBatis 所用日志的具体实现,未指定时将自动查找。SLF4J LOG4J LOG4J2 JDK_LOGGING COMMONS_LOGGING STDOUT_LOGGING NO_LOGGINGcacheEnabled全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。true falselazyLoadingEnabled延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。true false6.其他配置typeHandlers(类型处理器)objectFactory(对象工厂)plugins(插件)mybatis-generator-coremybatis-plus通用mapper7.映射器(mappers)MapperRegistry:注册绑定我们的Mapper文件方式一:【推荐使用】<!--每一个Mapper.xml都需要在Mybatis核心配置文件中注册--> <mappers> <mapper resource="com/xyh/dao/UserMapper.xml"/> </mappers>方式二:使用class文件绑定注册<!--每一个Mapper.xml都需要在Mybatis核心配置文件中注册--> <mappers> <mapper class="com.xyh.dao.UserMapper"/> </mappers>注意点:接口和他的Mapper配置文件必须同名!接口和他的Mapper配置文件必须在同一包下!方式三:使用扫描包进行注入绑定<!--每一个Mapper.xml都需要在Mybatis核心配置文件中注册--> <mappers> <package name="com.xyh.dao"/> </mappers>注意点:接口和他的Mapper配置文件必须同名!接口和他的Mapper配置文件必须在同一包下!8.生命周期和作用域生命周期,和,作用域,是至关重要的,因为错误的使用会导致非常严重的 并发问题 。SqlSessionFactoryBuilder:一旦创建了 SqlSessionFactory,就不再需要它了局部变量SqlSessionFactoryk可以想象为:数据库连接池一旦被创建就应该在应用的运行期间一直存在, 没有任何理由丢弃它或重新创建另一个实例。因此 SqlSessionFactory 的最佳作用域是应用作用域。最简单的就是使用单例模式或者静态单例模式。SqlSession:连接到连接池的一个请求!需要开起和关闭SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。每一个Mapper,就代表一个具体的业务
2021年11月06日
205 阅读
0 评论
0 点赞
2021-11-05
3.实现增删改查
CRUD1、namespacenamespace中的报名要和Dao/mapper接口的包名一致2、select选择,查询语句id:就是对应的namespace中的方法名resultType:Sql语句执行的返回值!parameterType: 参数类型编写接口/** * 根据id查询 * @param id * @return */ List<User> getidUser(int id);编写对应的mapper的sql语句<select id="getidUser" resultType="com.xyh.pojo.User" parameterType="int"> select * from user where id = #{id} </select>测试@org.junit.Test public void getUserid() { SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> userList = userMapper.getidUser(4); for (User user : userList) { System.out.println(user); } sqlSession.close(); }3、insert <insert id="addUser" parameterType="com.xyh.pojo.User" > insert into User(id,name,pwd) value(#{id},#{name},#{pwd}) </insert>4、update <update id="updateUser" parameterType="com.xyh.pojo.User"> update user set name=#{name},pwd=#{pwd} where id=#{id} </update>5、Delete <delete id="deleteUser" parameterType="int" > delete from user where id=#{id} </delete>注意点: 增删改需要提交事务6、分析错误标签不要匹配错resource 绑定mapper,需要使用路径!程序配置文件必须复合规范!NullPointerException,没有注册到资源!输出的xml文件中存在中文乱码问题maven资源没有导出问题!7、万能的Map假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map! //使用万能Map int addUser2(Map<String,Object> map); <insert id="addUser2" parameterType="map"> insert into User(id,name,pwd) value(#{id},#{name},#{pwd}) </insert> @org.junit.Test public void addUser2(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); Map<String,Object> map = new HashMap<String,Object>(); map.put("id",6); map.put("name","派大星"); map.put("pwd","321321"); userMapper.addUser2(map); sqlSession.close(); }Map传递参数,直接在sql中取出Key即可 【parameterType="map"】对象传递参数,直接在sql中取对象的属性值即可 【parameterType="Object"】只有一个基本类型参数的情况下,可以直接在sql中取到!多个参数用Map , 或者注解 !模糊查询java代码执行的时候,传递通配符 %%List<User> userList = userMapper.getlike("%萧%");在sql拼接中使用通配符!select * from user where name like "%"#{value}"%"
2021年11月05日
152 阅读
0 评论
0 点赞
2021-10-17
2、第一个Mybatis(IDEA)
搭建环境-导入Mybatis-编写代码-测试
2021年10月17日
178 阅读
0 评论
5 点赞
2021-10-16
1、Mybatis
MyBatis 是一款优秀的 持久层 框架, 它支持自定义 SQL、存储过程以及高级映射。 MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
2021年10月16日
129 阅读
0 评论
0 点赞