mybatis中sqlSession的使用

文章介绍了如何使用Mybatis,包括依赖的引入,如mybatis、mysql驱动和mybatis逆向工程依赖。详细讲解了jdbc.properties和mysql-config.xml的配置,以及SqlSession的创建和使用,特别提到了逆向工程在生成mapper、xml、实体类文件中的作用。

sqlsession的使用

在最开始我们使用jdbcUtil的方式进行硬编码,sql字符串写的很难受,使用mybatis可以解决这个问题,它提供了数据库与实体类的关系映射,通过在xml我们可灵活编写sql语句,同时mybatis提供了流程控制的动态标签,可以帮助我们更好的编写sql

依赖

        <!-- Mybatis核心    -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!-- MySQL驱动    -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
        <!-- mybatis逆向工程依赖 -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.7</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>

jdbc.properties

jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.url:jdbc:mysql://localhost:3306/testdb?characterEncoding=UTF-8&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&tinyInt1isBit=false&zeroDateTimeBehavior=convertToNull
jdbc.username=root
jdbc.password=root

mysql-config.xml配置

  • 我们可以将鼠标指到configuration标签的附近,可以看到能配置那些东西,注意这些参数可能存在先后配置的顺序
  • 我们也可以直接在数据源的地方写数据库的信息,但是&要换为&amp;
  • 在ssm整合的时候驱动的名字是driverClass, 但是好像在单独使用mybatis的时候不行,要写成driver
  • 不知道怎么回事mapper的包扫描不起作用,我直接写的具体的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="jdbc.properties"></properties>

    <settings>
        <!-- 映射下划线到驼峰命名    last_name ==> lastName    -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- 开启延迟加载 -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- 指定加载的属性是按需加载 -->
<!--        <setting name="aggressiveLazyLoading" value="false"/>-->
        <!-- 二级缓存 -->
<!--        <setting name="cacheEnabled" value="true"/>-->
        <!-- log4j日志开启-->
<!--        <setting name="logImpl" value="LOG4J"/>-->
    </settings>

    <!--起别名-->
    <typeAliases>
        <package name="com.testMaven.entity"/>
        <package name="com.testMaven.vo"/>
        <package name="com.testMaven.dto"/>
    </typeAliases>

    <!--    分页插件,可能会因为版本过高会报错-->
<!--    <plugins>-->
<!--        <plugin interceptor="com.github.pagehelper.PageHelper">-->
<!--            <property name="dialect" value="mysql"/>-->
<!--        </plugin>-->
<!--    </plugins>-->

    <!--    数据环境可以配置多个-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClass}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>

<!--        <environment id="dev_oracle">-->
<!--            <transactionManager type="JDBC" />-->
<!--            <dataSource type="POOLED">-->
<!--                <property name="driver"  value="${orcl.driver}" />-->
<!--                <property name="url"  value="${orcl.url}" />-->
<!--                <property name="username"  value="${orcl.username}" />-->
<!--                <property name="password"  value="${orcl.password}" />-->
<!--            </dataSource>-->
<!--        </environment>-->

    </environments>



    <mappers>
<!--        <package name="com.testMaven.mapper"/>-->
        <mapper resource="mapper/CommentIfnoMapper.xml"/>
        <mapper resource="mapper/AnnounceInfoMapper.xml"/>
    </mappers>

</configuration>

逆向工程

可以帮助我们生成mapper、xml、实体类文件,只要引入相关依赖,在运行相关的类就行了,还有一种方式运行逆向工程,在pom.xml配置一个插件,在maven中启动插件也能生成代码,不过后面我们mybatis-plus我们基本都是用mybatisx、easycode生成代码

public class GeneratorTest {

    public static void main(String[] args) throws Exception {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        File configFile = new File("src/main/resources/mybatis-generator-config.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
        System.out.println("生成成功!");
    }
}

创建sqlSession

在编写sql是如果你的数据库字段的日期是0000-00-00 00:00:00,映射过来可能会出错,需要在数据库后添加&zeroDateTimeBehavior=convertToNull

public class SqlSessionTest {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        //静态代码块会随着类的加载而自动执行,且只执行一次
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException, ParseException {
       getCommentInfoByOr();
    }

    public static void insert() throws ParseException {
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        CommentIfnoMapper commentIfnoMapper = sqlSession.getMapper(CommentIfnoMapper.class);
        Date d = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String s = sdf.format(d);
        Date date = sdf.parse(s);
        CommentInfoDTO commentInfoDTO = new CommentInfoDTO("测试",1,1, date);
        int row  = commentIfnoMapper.insertComment(commentInfoDTO);
        System.out.println(row);
    }
 }
欢迎指正解答
### MyBatisSqlSession使用方法 #### 什么是 SqlSession? `SqlSession` 是 MyBatis 提供的一个核心接口,用于与数据库进行交互。它封装了执行 SQL 语句、管理事务以及获取 Mapper 接口的功能[^1]。 #### 如何创建 SqlSession 实例? 通常情况下,通过 `SqlSessionFactory` 创建 `SqlSession` 实例。以下是常见的两种方式: 1. **手动创建 SqlSession** 如果不依赖任何框架(如 Spring),可以直接通过配置文件加载并创建实例。 2. **基于框架集成的方式** 当使用 MyBatis 和 Spring 集成时,推荐利用声明式事务处理机制来管理 `SqlSession` 生命周期,而不是手动操作[^3]。 #### 基本用法示例 下面是一个完整的例子展示如何使用 `SqlSession` 执行 CRUD 操作。 ```java import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; public class MyBatisExample { private final SqlSessionFactory sqlSessionFactory; public MyBatisExample(SqlSessionFactory sqlSessionFactory) { this.sqlSessionFactory = sqlSessionFactory; } public void insertRecord() { try (SqlSession session = sqlSessionFactory.openSession()) { // 自动关闭资源 User user = new User(); user.setName("John Doe"); user.setAge(30); int result = session.insert("com.example.mapper.UserMapper.insertUser", user); if (result > 0) { System.out.println("Insert successful!"); } session.commit(); // 显式提交事务 } catch (Exception e) { e.printStackTrace(); } } public List<User> selectAllUsers() { try (SqlSession session = sqlSessionFactory.openSession()) { return session.selectList("com.example.mapper.UserMapper.selectAllUsers"); } } } ``` 上述代码展示了两个主要的操作: - 插入记录并通过显式调用 `commit()` 方法完成事务提交。 - 查询所有用户数据,并返回结果列表。 #### 关键方法说明 | 方法名 | 功能描述 | |--------|----------| | `insert(String statement, Object parameter)` | 执行插入操作 | | `update(String statement, Object parameter)` | 更新指定的数据 | | `delete(String statement, Object parameter)` | 删除符合条件的数据 | | `selectOne(String statement, Object parameter)` | 返回单条查询结果 | | `selectList(String statement, Object parameter)` | 获取多条记录的结果集 | | `getMapper(Class<T> type)` | 获得绑定的 Mapper 对象 | 这些方法均可以通过 `SqlSession` 来访问和调用[^4]。 #### 注意事项 - 在实际开发中,建议优先采用声明式的事务管理工具(例如 Spring AOP 或者 MyBatis-Spring),从而减少对 `SqlSession` 的直接控制需求。 - 确保每次打开的 `SqlSession` 都能正确释放资源,防止内存泄漏问题发生。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值