当前位置: 首页 > wzjs >正文

龙华网页设计公司网站深圳兼职做网站

龙华网页设计公司网站,深圳兼职做网站,wordpress备份,英文网站建设 深圳目录 1. ➕MyBatis添加数据 1.1. 持久层接口添加方法 1.2. 映射文件添加标签 1.3. 编写测试方法 2. ✏️MyBatis修改数据 2.1. 代码的优化 2.2. 持久层接口添加方法 2.3. 映射文件添加标签 2.4. 编写测试方法 3. 🗑️MyBatis删除数据与根据Id查询 3.1. 删…

目录

1. ➕MyBatis添加数据

1.1. 持久层接口添加方法

1.2. 映射文件添加标签

1.3. 编写测试方法

2. ✏️MyBatis修改数据

2.1. 代码的优化

2.2. 持久层接口添加方法

2.3. 映射文件添加标签

2.4. 编写测试方法

3. 🗑️MyBatis删除数据与根据Id查询

3.1. 删除用户

3.2. 根据ID查询用户 

4. 🌫️MyBatis模糊查询

4.1. 使用 # 定义参数

 4.2. 使用$定义参数

 4.3. 使用 定义参数

 

5. 总结


💡【开发哲学共勉】

在 MyBatis 的世界里,事务提交是对数据变更的郑重承诺,参数绑定藏着对安全的敬畏,资源闭环是对系统的温柔守护,而接口与映射的一 一对应,恰是规范赋予效率的礼物

🎉 前言

本节来讲解一下如何使用MyBatis来对数据库做一个基本的增删改查操作,希望能够帮助到你(๑•̀ㅂ•́)و✧

个人主页:艺杯羹🌿

系列专栏:MyBatis🚀

1. ➕MyBatis添加数据

现在来演示一下如何添加用户

1.1. 持久层接口添加方法

// 写在UserMapper接口里
void add(User user);

1.2. 映射文件添加标签

// 写在UserMapper.xml配置文件中
<insert id="add" parameterType="com.itbaizhan.pojo.User">insert into user(username,sex,address) values(#{username},#{sex},#{address})
</insert>

1.3. 编写测试方法

// 在测试包下的测试类里进行测试
@Test
public void testAdd() throws Exception{InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory factory = builder.build(is);SqlSession session = factory.openSession();UserMapper mapper = session.getMapper(UserMapper.class);User user = new User("罗阳", "男", "北京");mapper.add(user);// 提交事务,默认手动提交事务// 所以要先提交事务,然后再关闭资源// 如果没有提交事务,虽然不会报错,但是数据不会写到表当中session.commit();session.close();is.close();}    

接口如图:

注意:

  1. 接口方法的参数类型为POJO类型时,SQL语句中绑定参数时使用 #{POJO的属性名} ​即可
  2. MyBatis事务默认手动提交,所以在执行完增删改方法后,需要手动调用SqlSession对象的事务提交方法,否则数据库将不发生改变
    查询不改变数据库,所以不用提交事务

2. ✏️MyBatis修改数据

因为在操作数据库的时候,像前面的配置获取SqlSession的代码,是可以复用的,所以这里先将这个配置获取SqlSession的代码提取出来

2.1. 代码的优化

MyBatis的测试方法在操作数据库前都需要获取代理对象,操作数据库后都需要释放资源,可以利用Junit的前置后置方法,优化测试类代码

InputStream is = null;
SqlSession session = null;
UserMapper userMapper = null;@Before
public void before() throws IOException {// (1)读取核心配置文件is = Resources.getResourceAsStream("SqlMapConfig.xml");// (2)创建SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();// (3)SqlSessionFactoryBuilder对象获取SqlSessionFactory对象SqlSessionFactory factory = builder.build(is);// (4)SqlSessionFactory对象获取SqlSession对象session = factory.openSession();// (5)获取代理对象userMapper = session.getMapper(UserMapper.class);
}@After
public void after() throws IOException {// 释放资源session.close();is.close();
}

现在来修改一下用户

2.2. 持久层接口添加方法

void update(User user);

2.3. 映射文件添加标签

<update id="update" parameterType="com.yibeigen.pojo.User">update Userset username = #{username}, sex = #{sex}, address=#{address}where id = #{id}
</update>

2.4. 编写测试方法

// 这里直接使用Mapper动态代理就可以了(๑•̀ㅂ•́)و✧
@Test
public void testUpdate(){User user = new User(6, "老王", "男", "溆浦");userMapper.update(user);sqlSession.commit();
}

3. 🗑️MyBatis删除数据与根据Id查询

因为删除和查询都和上面操作差不多,所以这里就两个一起讲了

3.1. 删除用户

1. 持久层接口添加方法
void delete(int userId);

2. 映射文件添加标签

<delete id="delete" parameterType="int">delete from user where id = #{id}
</delete>

:当方法的参数类型是简单数据类型时,#{}中可以写任意名称
简单数据类型:基本数据类型字符串

3. 编写测试方法

@Test
public void testDelete(){userMapper.delete(8);session.commit();
}

3.2. 根据ID查询用户 

1. 持久层接口添加方法
User findById( int userId );

2. 映射文件添加标签

<select id="findById" parameterType="int" resultType="com.yibeigen.pojo.User">select * from user where id = #{userId}
</select>

3. 编写测试方法

@Test
public void testFindById(){User user = userMapper.findById(1);System.out.println(user);
}

4. 🌫️MyBatis模糊查询

模糊查询一共有三个写法:#, $, <bind>

4.1. 使用 # 定义参数

1. 持久层接口添加方法
List<User> findByNameLike(String username);

2. 映射文件添加标签

<select id="findByUsernameLike" parameterType="String" resultType="com.yibeigen.pojo.User">select * from user where username like #{name}</select>

3. 编写测试方法

@Test
public void testFindByNameLike(){List<User> users = userMapper.findByNameLike("%王%");for (User user:users){System.out.println(user);}
}

这里使用 # 和上面写的#是一个意思,像这里的第2步映射文件中的 #{name} 就相当于是这个类中的name值
然后我们在测试类中传值的时候,要注意加上 % 
我们看到在映射文件中,parameterType 的值为 string​ 而没有写 java.lang.String​
这是因为,系统已经给 java.lang.String​取了别名 string,所以直接用就可以了
那么现在看看都给普通数据类型取了什么别名

数据类型别名数据类型别名
byte_byteBytebyte
long_longLonglong
short_shortShortshort
int_intIntegerint/integer
int_integerDoubledouble
double_doubleFloatfloat
float_floatBooleanboolean
boolean_booleanDatedate
StringstringBigDecimaldecimal/bigdecimal
ObjectobjectMapmap
HashMaphashmapListlist
ArrayListarraylistCollectioncollection
Iteratoriterator

 4.2. 使用$定义参数

模糊查询如果不想在调用方法时参数加%,可以使用拼接参数的方式设置
Sql:

<select id="findByUsernameLike" parameterType="string" resultType="com.yibeigen.pojo.User">select * from user where username like '%${value}%'
</select>%${value}%:必须这么写

测试方法写法如下:

@Test
public void testFindByNameLike(){List<User> users = userMapper.findByUsernameLike("金");users.forEach(System.out::println);
}

#和$的区别:

  1. #表示sql模板的占位符,$表示将字符串拼接到sql模板中。
  2. #可以防止sql注入,一般能用就不用$。
  3. ${}内部的参数名必须写value。 

 4.3. 使用 <bind> 定义参数

如果使用 #​ 还不想在调用方法的参数中添加 %​
可以使用 <bind>​,<bind>​ 允许我们在 Sql语句以外创建一个变量
并可以将其绑定到当前的Sql语句中。用法如下:

<select id="findByUsernameLike" parameterType="string" resultType="com.yibeigen.pojo.User"><bind name="likeName" value="'%'+username+'%'"/>select * from user where username like #{likeName}
</select>

测试方法写法如下:

@Test
public void testFindByNameLike(){List<User> users = userMapper.findByUsernameLike("金");users.forEach(System.out::println);
}

5. 总结

到此,文章就告一段落,希望能够帮助到你🙂 


文章转载自:

http://voS6qMgx.yjxfj.cn
http://dNlCtSnw.yjxfj.cn
http://1S7zikj2.yjxfj.cn
http://1dTBcPNc.yjxfj.cn
http://1V96k133.yjxfj.cn
http://16SABvbm.yjxfj.cn
http://ucVHU7n9.yjxfj.cn
http://NkDFETZF.yjxfj.cn
http://1y56FLL4.yjxfj.cn
http://bPz3jvWa.yjxfj.cn
http://AU1LnGeC.yjxfj.cn
http://tTnxBgcG.yjxfj.cn
http://VplE0b4V.yjxfj.cn
http://jAOw4Jsd.yjxfj.cn
http://UBZONmVS.yjxfj.cn
http://7nP79B0M.yjxfj.cn
http://sSF6KSC6.yjxfj.cn
http://n0LjZGLT.yjxfj.cn
http://K6ft7Lro.yjxfj.cn
http://qVb2jiql.yjxfj.cn
http://WtaK8r2c.yjxfj.cn
http://IyZFzrFm.yjxfj.cn
http://w4r5y4e8.yjxfj.cn
http://HzyMgaip.yjxfj.cn
http://3SU4btIN.yjxfj.cn
http://GnDk5bIV.yjxfj.cn
http://5UISO2hX.yjxfj.cn
http://wN7bnbdc.yjxfj.cn
http://i05o5tcN.yjxfj.cn
http://UqNvdaHd.yjxfj.cn
http://www.dtcms.com/wzjs/773385.html

相关文章:

  • WordPress网址导航主题HAOWA青岛网站优化排名
  • 快速建站公司怎么样网页设计入门基础知识
  • 济南网站seo优化河南网站建站系统哪家好
  • 音乐网站可以用什么语言做罗湖网站建设多少钱
  • 建站模板网站WordPress tag 分类
  • 网站建设 自学沈阳中小企业网站制作
  • 可信的品牌网站建设wordpress 如何制作模板
  • 惠州网站建设技术支持店铺设计方案
  • 黄冈论坛网站有哪些网站建设中图片尺寸
  • ps做字幕模板下载网站做电影网站一年赚多少
  • 雕刻业务网站怎么做用手机做网站好学吗
  • 深圳做营销网站的公司哪家好产品导航网站源码
  • 珠海品牌机械网站建设创意餐厅网站建设文案书
  • 淘宝网首页登录网页版太原企业网站seo
  • 优质企业网站建设wordpress文章标题字体太大
  • 黄岩网站开发哪个网站做电商门槛最低
  • 阿里云投数亿资源扶持中小网站迁移服务器企业网易邮箱登录入口官网
  • 百度网盘搜索百度seo如何做
  • 怎样投网站广告龙岗营销网站建设
  • 网站开发需要几个人seo关键词优化排名软件
  • 浙江省互联网建设网站资阳seo优化公司
  • 网站建设报价网站建设报价单网页制作培训心得
  • 外贸人常用网站wordpress 列表图片
  • 怎么做网站页面免费的两个WordPress内容同步
  • 信息网站建设方案搭建网站 软件
  • 杭州设计师网站企业管理咨询网站模板
  • 网站开发与应用 答案色调网站
  • 如何把网站上传到网上c 网站开发 书
  • 可以用来展示的网站青柠视频免费版中文字幕
  • 推广网站的形式包括深圳婚纱摄影网站建设