Mybatis入门

前言:之前一直在用SpringJPA和JdbcTemplate,Mybatis用过一段时间但是忘了,今天从最基础的地方从新复习一遍Mybatis,具体讲解不多,主要看代码吧

目录

第一章 原生Java操作数据库

第二章 原生Mybatis操作数据库

2.1 maven配置

2.2 SqlMapConfig.xml

2.3 sql的xml文件

2.4 运行代码

第三章 Mybatis使用接口方式操作数据库

3.1 接口

3.2 sql的xml文件

3.3 SqlMapConfig.xml

3.4 运行代码

第四章 Mybatis结合Spring操作数据库

4.1 maven配置

4.2 数据库配置文件

4.3 Mybatis个性化配置

4.4 Spring配置文件

4.5 sql的xml文件

4.6 运行代码

第五章 Mybatis结合SpringBoot操作数据库

5.1 maven配置

5.2 sql的xml文件

5.3 application.properties

5.4 运行代码

 


第一章 原生Java操作数据库

public class MysqlDemo {
    static final String DB_URL = "jdbc:mysql://localhost:3306/mysql_learn?serverTimezone=GMT%2B8";
    static final String USER = "root";
    static final String PASS = "123456";

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("opening the database...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
            stmt = conn.createStatement();
            String sql;
            sql = "select * from person";
            ResultSet rs = stmt.executeQuery(sql);
            while(rs.next()) {
                // getInt getString 都是指获得参数所指的那一列的数据
                String name = rs.getString("name");
                int age = rs.getInt("age");
                String school = rs.getString("school");
                String home = rs.getString("home");
                System.out.println(age+name+home+school);
            }
            // 使用后关闭
            rs.close();
            stmt.close();
            conn.close();

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }


    }

}
<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
</dependency>

 

第二章 原生Mybatis操作数据库

2.1 maven配置

<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
</dependency>
<dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.5</version>
</dependency>
<dependency>
     <groupId>log4j</groupId>
     <artifactId>log4j</artifactId>
     <version>1.2.12</version>
</dependency>

2.2 SqlMapConfig.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>
    <!--   配置环境-->
    <environments default="mysql">
        <!--配置mysql的环境-->
        <environment id="mysql">
            <!--配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置连接池-->
            <dataSource type="POOLED">
                <!--配置连接数据库的4个基本信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mysql_learn?serverTimezone=GMT%2B8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
    <mappers>
        <mapper resource="mappers/Person.xml"/>
    </mappers>
</configuration>

2.3 sql的xml文件

<?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">

<!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->
<mapper namespace="Person">
    <select id="findUserById" parameterType="String" resultType="common.Person">
        select * from person where person_id = #{0}
    </select>
</mapper>

2.4 运行代码

package mybatis;

/**
 * @author ZhangChen
 **/
public class MybatisDemo {
    public static void main(String[] args) {
        new MybatisDemo().start();
    }

    public void start(){
        try {
            testSearchById();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void testSearchById() throws IOException {
        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = sqlSessionFactory.openSession();
        //4.执行Sql语句
        Person person = session.selectOne("Person.findUserById", "1");

        //5. 打印结果
        System.out.println(person.getName());
        //6.释放资源
        session.close();
        in.close();
    }
}

 

 

第三章 Mybatis使用接口方式操作数据库

上面我们自己创建session,然后选择sql语句,传入参数查找,这样的话比较麻烦,我们观察到,如果我们能将接口与sql语句映射起来,那我们就能通过动态代理的方式根据接口创建类,在方法获取session,然后传入session与接口对应的sql语句,和我们传入的参数,就可以比较方便的使用Mybatis查询数据。

总的来说,就是:

同时,考虑到mapper多了之后,如果一个个都指定位置写在mappers中将会比较麻烦,可以定义一个包直接进行扫描。

特点值得注意的是:如果使用包指定配置的话,xxx.xml的名字必须和接口的名字一样,同时指定的包的路径必须和接口的路径一样(要让xml文件和dao层接口类在编译后生成在同一个文件夹)

这里留两个问题后面解决:为什么名字要一样,为什么xml文件编译后要和接口在同一个文件夹,感觉应该是源码设计的问题。

<mappers>
        <mapper resource="mappers/Person.xml"/>
    </mappers>

变成 

<mappers>
        <package name="mappers"></package>
    </mappers>

 

3.1 接口

public interface PersonDao {
    Person getPerson(String personId);
}

3.2 sql的xml文件

<?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">

<!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->
<mapper namespace="mybatisinterface.PersonDao">
    <select id="getPerson" parameterType="String" resultType="common.Person">
        select * from person where person_id = #{0}
    </select>
</mapper>

3.3 SqlMapConfig.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>
    <!--   配置环境-->
    <environments default="mysql">
        <!--配置mysql的环境-->
        <environment id="mysql">
            <!--配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置连接池-->
            <dataSource type="POOLED">
                <!--配置连接数据库的4个基本信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mysql_learn?serverTimezone=GMT%2B8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
    <mappers>
        <package name="mybatisinterface"/>
    </mappers>
</configuration>

3.4 运行代码

public class MybatisInterfaceDemo {
    public static void main(String[] args) {
        new MybatisInterfaceDemo().start();
    }

    public void start(){
        try {
            testSearchById();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void testSearchById() throws IOException {
        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = sqlSessionFactory.openSession();
        //4.执行Sql语句
        PersonDao personDao = session.getMapper(PersonDao.class);
        Person person = personDao.getPerson("1");
        //5. 打印结果
        System.out.println(person.getName());
        //6.释放资源
        session.close();
        in.close();
    }
}

 

第四章 Mybatis结合Spring操作数据库

4.1 maven配置

<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
</dependency>
<dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.5</version>
</dependency>
<dependency>
     <groupId>log4j</groupId>
     <artifactId>log4j</artifactId>
     <version>1.2.12</version>
</dependency>
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.18.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.2</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.3.18.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.18.RELEASE</version>
        </dependency>

4.2 数据库配置文件

db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mysql_learn?serverTimezone=GMT%2B8
jdbc.username=root
jdbc.password=123456

4.3 Mybatis个性化配置

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>
	<!-- 配置全局属性 -->
	<settings>
		<!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 -->
		<setting name="useGeneratedKeys" value="true" />

		<!-- 使用列别名替换列名 默认:true -->
		<setting name="useColumnLabel" value="true" />

		<!-- 开启驼峰命名转换:Table{create_time} -> Entity{createTime} -->
		<setting name="mapUnderscoreToCamelCase" value="true" />
	</settings>
</configuration>

4.4 Spring配置文件

spring-dao.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xmlns:cache="http://www.springframework.org/schema/cache"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">

	<context:annotation-config/>
	<context:property-placeholder location="classpath:*.properties" />

	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
		<!-- 配置连接池属性 -->
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>

	<!-- 4.配置SqlSessionFactory对象 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 注入数据库连接池 -->
		<property name="dataSource" ref="dataSource" />
		<!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
		<property name="configLocation" value="classpath:mybatis-config.xml" />
		<!-- 扫描sql配置文件:mapper需要的xml文件 -->
		<property name="mapperLocations" value="classpath:mybatisspring/*.xml" />
	</bean>

	<!-- 5.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 注入sqlSessionFactory -->
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
		<!-- 给出需要扫描Dao接口包 -->
		<property name="basePackage" value="mybatisspring.dao" />
	</bean>

	<context:component-scan base-package="mybatisspring.service" />

</beans>

4.5 sql的xml文件

<mapper namespace="mybatisspring.dao.PersonDao">
    <select id="getPerson" parameterType="String" resultType="common.Person">
        select * from person where person_id = #{0}
    </select>
</mapper>

4.6 运行代码

public interface PersonDao {
    Person getPerson(String personId);
}
@Service
public class PersonService {
    @Autowired
    PersonDao personDao;
    public Person getPerson(String personId){
        return  personDao.getPerson(personId);
    }
}
public class MybatisSpring {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/spring-dao.xml");
        PersonService personService = applicationContext.getBean(PersonService.class);
        Person person = personService.getPerson("1");
        System.out.println(person.getName());
    }
}

 

第五章 Mybatis结合SpringBoot操作数据库

5.1 maven配置

插件就是SpringBoot的默认插件

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

5.2 sql的xml文件

<?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">

<!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->
<mapper namespace="com.aesjourey.mybatisspringboot.dao.PersonMapper">
    <select id="getPersonById" parameterType="String" resultType="com.aesjourey.mybatisspringboot.entity.Person">
        select * from person where person_id = #{0}
    </select>
</mapper>

5.3 application.properties

server.port=8080
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mysql_learn?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456

mybatis.mapperLocations=classpath:mappers/*.xml

5.4 运行代码

启动类:

@SpringBootApplication
@MapperScan("com.aesjourey.mybatisspringboot.dao")
public class MybatisspringbootApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisspringbootApplication.class, args);
    }
}

实体类:

@Getter
@Setter
public class Person {
    String person_id;
    String name;
    int age;
    String school;
    String home;
}

controller:

@RestController
public class getPerson {
    @Autowired
    PersonService personService;
    @RequestMapping("/getPersonByPersonId")
    public Person getPersonByPersonId(String personId){
        Person person = personService.getPersonById(personId);
        return person;
    }
}

service:

@Service
public class PersonService {
    @Autowired
    PersonMapper personMapper;
    public Person getPersonById(String peopleId){
        Person person = personMapper.getPersonById(peopleId);
        return person;
    }
}

dao:

public interface PersonMapper {
    Person getPersonById(String personId);
}

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值