欧米茄女士手表网站,中国核工业二三建设有限公司待遇,淮安百度网站建设,东西湖区城乡建设局网站前些天发现了一个巨牛的人工智能学习网站#xff0c;通俗易懂#xff0c;风趣幽默#xff0c;忍不住分享一下给大家。点击跳转到教程。
传参方式 使用不同的传参方式#xff1a;
使用Param 之前博文中的项目使用了这种简单的传参方式#xff1a; Insert(INSERT IN…前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。点击跳转到教程。
传参方式 使用不同的传参方式
使用Param 之前博文中的项目使用了这种简单的传参方式 Insert(INSERT INTO T_USER(NAME, PASSWORD, PHONE) VALUES(#{name}, #{password}, #{phone}))int insert(Param(name) String name, Param(password) String password, Param(phone) String phone);
理解 Param中定义了name对应了sql中的#{name}, password 对应了sql中的#{password}, phone 对应了sql中的 #{phone}。
使用Map 通过Map对象来传递参数
Insert(INSERT INTO T_USER(NAME, PASSWORD, PHONE) VALUES( #{name, jdbcTypeVARCHAR}, #{password, jdbcTypeVARCHAR}, #{phone, jdbcTypeVARCHAR}))int insertByMap(MapString, Object map);
对于Insert语句中需要的参数我们只需要在map中填入同名的内容即可具体如下面代码所示
MapString, Object map new HashMap();map.put(name,王五);map.put(password,23423);map.put(phone, 13400000000);userMapper.insertByMap(map);
使用对象 如果我们使用普通的java对象作为查询条件的参数
Insert(INSERT INTO T_USER(NAME, PASSWORD, PHONE) VALUES(#{name}, #{password}, #{phone}))int insertByUser(User user);
只需要语句中的#{name}、#{age}就分别对应了User对象中的name和age属性。 User u new User();u.setName(赵六);u.setPassword(12312312);u.setPhone(13888888888);userMapper.insertByUser(u);
增删改查 MyBatis针对不同的数据库操作分别提供了不同的注解来进行配置在之前的示例中演示了Insert下面针对User表做一组最基本的增删改查作为示例
Select(SELECT * FROM T_USER WHERE PHONE #{phone})User findUserByPhone(Param(phone) String phone);Insert(INSERT INTO T_USER(NAME, PASSWORD, PHONE) VALUES(#{name}, #{password}, #{phone}))int insertByUser(User user);Update(UPDATE T_USER SET NAME #{name}, PASSWORD #{password} WHERE PHONE #{phone})void update(User user);Delete(DELETE FROM T_USER WHERE ID #{id})void delete(Integer id);
进行测试
package com.winterchen;import com.winterchen.domain.User;
import com.winterchen.mapper.UserMapper;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;import java.util.HashMap;
import java.util.Map;RunWith(SpringRunner.class)
SpringBootTest
public class SpringbootMybatisDemo2ApplicationTests {Autowiredprivate UserMapper userMapper;TestTransactionalpublic void test3(){userMapper.insert(张三, 123456, 18600000000);User u userMapper.findUserByPhone(18600000000);Assert.assertEquals(123456, u.getPassword());u.setName(赵六);u.setPassword(12312312);userMapper.update(u);u userMapper.findUserByPhone(18600000000);Assert.assertEquals(12312312, u.getPassword());userMapper.delete(u.getId());u userMapper.findUserByPhone(18600000000);Assert.assertEquals(null, u);}
}
注意当使用Transactional进行了事务管理在单元测试结束之后会自动回滚所以测试跑完之后数据库中没有数据。所以只要测试通过了就没有问题了。
返回结果绑定 对于增、删、改操作相对变化较小。而对于“查”操作我们往往需要进行多表关联汇总计算等操作那么对于查询的结果往往就不再是简单的实体对象了往往需要返回一个与数据库实体不同的包装类那么对于这类情况就可以通过Results和Result注解来进行绑定具体如下: Results({Result(property name, column NAME),Result(property password, column PASSWORD),Result(property phone, column PHONE)})Select(SELECT NAME, PASSWORD, PHONE FROM T_USER)ListUser findAll();
在上面代码中Result中的property属性对应User对象中的成员名column对应SELECT出的字段名。在该配置中故意没有查出id属性只对User对应中的name,password,phone对象做了映射配置这样可以通过下面的单元测试来验证查出的id为null而其他属性不为null
TestTransactionalpublic void test4(){userMapper.insert(张三, 123456, 18600000000);userMapper.insert(李四, 123456, 13500000000);ListUser list userMapper.findAll();Assert.assertEquals(2, list.size());} --------------------- 转自https://blog.csdn.net/winter_chen001/article/details/78623700