Mybatis-简单复习(使用步骤+CRUD)

Mybatis 使用步骤

  1. 导包
  2. 创建 Mybatis-config.xml 配置文件
  3. 编写 MybatisUtils
  4. 创建 实体类
  5. 创建 Mapper 接口
  6. 创建 Mapper接口映射文件
  7. 测试

使用步骤详解

导包

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

Mybatis-config

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/kuang/dao/userMapper.xml"/>
    </mappers>
</configuration>

Mybatis-util

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 java.io.IOException;
import java.io.InputStream;
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
        // 读取配置文件
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
        // 创建 SqlSessionFactory
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //获取SqlSession连接
    public static SqlSession getSession(){
        return sqlSessionFactory.openSession();
    }
}

User 实体类

// 有参构造
@AllArgsConstructor
// 无参构造
@NoArgsConstructor
public class User {
    private int id;  //id
    private String name;   //姓名
    private String pwd;   //密码
    //set/get
    //toString()
}

Mapper 接口类

import com.kuang.pojo.User;
import java.util.List;
public interface UserMapper {
    List<User> selectUser();
}

映射文件

  • 需要跟Mapper接口的文件名相对应
  • namespace 十分重要,不能写错!
  • 配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致!
<?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 -->
<mapper namespace="com.kuang.dao.UserMapper">
  <select id="selectUser" resultType="com.kuang.pojo.User">
    select * from user
  </select>
</mapper>

使用

public class MyTest {
    @Test
    public void selectUser() {
        SqlSession session = MybatisUtils.getSession();
        //方法一:
        //List<User> users = session.selectList("com.kuang.mapper.UserMapper.selectUser");
        //方法二:
        UserMapper mapper = session.getMapper(UserMapper.class);
        List<User> users = mapper.selectUser();
        for (User user: users){
            System.out.println(user);
        }
        // 注意关闭 session
        session.close();
    }
}

Maven静态资源过滤问题

<resources>
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
    </resource>
</resources>

CRUD-Mybatis操作方法

Select 方法

参数
  • id
    • 命名空间唯一的标识符
    • 接口中的方法名与映射文件中的SQL语句ID相对应
  • parameterType
    • 传入参数的类型
  • resultType
    • 返回参数的类型,一般对应实体类
需求练习:根据id查询用户
UserMapper
public interface UserMapper(){
	public User selectUserById(int id);
}
UserMapper.xml
<select id = "selectUserById" resultType = "com.xiaocheng.pojo.User">
	select * from users where id = #{id}
</select>
MyTest
@Test
public void Test1(){
	SqlSession sqlSession = MybatisUtils.getSession();
	UserMapper mapper = sqlSession.getMapper(UserMapper.class);
	User user = mapper.selectUserById(1);
	System.out.println(user);
	session.close;
}
需求练习:根据密码和名字来查询用户
方法1:

直接在方法中传递参数

User selectUserByNP(@Param("username") String username,@Param("pwd") String pwd);

在接口方法的参数前加 @Param 属性Sql 语句编写的时候,直接取 @Param 中设置的值即可,不需要单独设置参数类型。

方法2:

使用万能的Map

User selectUserByNP2(Map<String,Object> map);

编写Sql的时候,需要传递参数类型,参数类型为map

<select id = "selectUserByNP2" parameterType = "map" resultType = "com.kuang.pojo.User">
	select * from user where name = #{username} and pwd = #{pwd}
</select>

使用时,key的取值为Sql取值即可,没有顺序要求

Map<String,Object> map = new HashMap<String,Object>();
map.put("username","小明");
map.put("pwd","123456");
User user = map.selectUserByNP2(map);
总结:

如果参数过多,使用HashMap。如果参数很少,直接使用@Param直接传递参数即可

Insert

需求:给数据库添加一个用户
步骤:
  1. 在UserMapper 接口中添加对应的方法
int addUser(User user);
  1. 在UserMapper.xml 中添加映射语句
<insert id = "addUser" parameterType = "com.kuang.pojo.User">
	insert into user (id,name,pwd) values(#{id},#{name},#{pwd})
</insert>
  1. 测试
@Test
public void testAddUser(){
	SqlSession session = MybatisUtils.getSession();
	UserMapper mapper = session.getMapper(UserMapper.class);
	User user = new User(4,"李四","zxcvbn");
	int i = mapper.addUser(user);
	System.out,println(i);
	// 重点,提交事务,不写的话,不会提交到数据库
	session.commit();
	session.close();
	}

注意点:增、删、改操作需要提交事务!

Update

  1. 编写接口方法
int updateUser(User user);
  1. 编写对应的配置文件SQL
<update id = "updateUser" parameterType = "com.kuang.pojo.User">
	update user set name=#{name},pwd#{pwd} where id = #{id}
</update>
  1. 测试
@Test
public void testUpdateUser(){
	SqlSeesion sqlsession = MybatisUtils.getSession();
	UserMapper mapper = session.getMapper(UserMapper.class);
	int i = mapper.updateUser(User user);
	System.out.println(i);
	 //提交事务,重点!不写的话不会提交到数据库
	session.commit();
	session.close();
}

Delete

  1. 编写接口方法
int delectUser(int id);
  1. 编写对应的映射文件
<delete id = "deleteUser" paramterType = "int">
	delete from user where id = #{id}
</delete>
  1. 测试
@Test
public void testDeleteUser(){
	SqlSession session = MybatisUtils.getSession();
	UserMapper mapper = session.getMapper(UserMapper.class);
	int i = mapper.deleteUser(4);
	System.out.println(i);
	session.commit();
	session.close();
}

总结

  • 所有的增删改查都需要提交事务,session.commit()
  • 为了规范操作,在Sql配置文件上,我们尽量写上 Paramter 和 resultType
  • 接口上所有的普通参数,尽量都写上@Param参数
  • 根据业务需求,可以考虑使用Map传递参数

模糊查询

方法1:
string wildcardname = "%xmi%";
list<name> names = mapper.selectLike(wildcardname);
<select id = "selectLike">
	select * from foo where bar like #{value}
</select>
方法2:
string wildcardname = "smi";
list<name> names = mapper.selectLike(wildcardname);
<select id = "selectLike">
	select * from foo where bar like "%"#{value}"%"
</select>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot整合MyBatis-Plus可以通过使用代码生成器来自动生成CRUD代码。下面是使用步骤: 1. 首先,在pom.xml文件中添加MyBatis-Plus和相关依赖: ```xml <!-- MyBatis-Plus依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本号</version> </dependency> <!-- MyBatis-Plus代码生成器依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>最新版本号</version> </dependency> ``` 2. 创建一个配置类来配置代码生成器: ```java @Configuration public class MyBatisPlusConfig { @Value("${spring.datasource.url}") private String url; @Value("${spring.datasource.username}") private String username; @Value("${spring.datasource.password}") private String password; @Value("${spring.datasource.driver-class-name}") private String driverClassName; @Value("${mybatis-plus.package}") private String packageName; @Value("${mybatis-plus.author}") private String author; @Value("${mybatis-plus.table-prefix}") private String tablePrefix; @Bean public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); dataSource.setDriverClassName(driverClassName); return dataSource; } @Bean public GlobalConfig globalConfig() { GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setAuthor(author); globalConfig.setOpen(false); return globalConfig; } @Bean public DataSourceConfig dataSourceConfig() { DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setDbType(DbType.MYSQL); dataSourceConfig.setDriverName(driverClassName); dataSourceConfig.setUsername(username); dataSourceConfig.setPassword(password); dataSourceConfig.setUrl(url); return dataSourceConfig; } @Bean public PackageConfig packageConfig() { PackageConfig packageConfig = new PackageConfig(); packageConfig.setParent(packageName); packageConfig.setEntity("entity"); packageConfig.setMapper("mapper"); packageConfig.setService("service"); packageConfig.setServiceImpl("service.impl"); packageConfig.setController("controller"); return packageConfig; } @Bean public StrategyConfig strategyConfig() { StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig.setEntityColumnConstant(true); strategyConfig.setEntityLombokModel(true); strategyConfig.setNaming(NamingStrategy.underline_to_camel); strategyConfig.setInclude("表名1", "表名2"); // 生成指定的表 strategyConfig.setRestControllerStyle(true); strategyConfig.setTablePrefix(tablePrefix); // 设置表前缀 return strategyConfig; } @Bean public TemplateConfig templateConfig() { TemplateConfig templateConfig = new TemplateConfig(); templateConfig.setController(null); // 不生成controller层 return templateConfig; } @Bean public InjectionConfig injectionConfig() { Map<String, Object> map = new HashMap<>(); return new InjectionConfig() { @Override public void initMap() { this.setMap(map); } }; } @Bean public AutoGenerator autoGenerator() { AutoGenerator autoGenerator = new AutoGenerator(); autoGenerator.setGlobalConfig(globalConfig()); autoGenerator.setDataSource(dataSourceConfig()); autoGenerator.setPackageInfo(packageConfig()); autoGenerator.setStrategy(strategyConfig()); autoGenerator.setTemplate(templateConfig()); autoGenerator.setCfg(injectionConfig()); return autoGenerator; } } ``` 3. 在application.properties或application.yml文件中配置相关信息: ```properties # 数据源配置 spring.datasource.url=数据库URL spring.datasource.username=数据库用户名 spring.datasource.password=数据库密码 spring.datasource.driver-class-name=数据库驱动类名 # MyBatis-Plus配置 mybatis-plus.package=你的包路径 mybatis-plus.author=代码作者名 mybatis-plus.table-prefix=表前缀 ``` 4. 创建一个启动类,添加@SpringBootApplication和@EnableAutoConfiguration注解,并在main方法中调用代码生成器生成代码: ```java @SpringBootApplication @EnableAutoConfiguration public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); // 调用代码生成器生成代码 ApplicationContext context = SpringApplication.run(MyApplication.class, args); AutoGenerator autoGenerator = context.getBean(AutoGenerator.class); autoGenerator.execute(); } } ``` 5. 运行启动类,执行代码生成器。生成的代码将包含实体类、Mapper接口、Service接口、Service实现类和Controller类。 这样就能根据数据库表自动生成CRUD代码了。如果需要生成其他的代码,可以根据需要配置生成器相应的参数和模板。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值