idea(2)之mybatis入门

学习文档

提取码: 22fr
链接: https://pan.baidu.com/s/1GjuyIexQrES2WKxbylTrUw.

搭建mybatis框架环境

1、Mybatis相关插件安装

接下来安装以下插件

		Free mybatis plugin
		Mybatis generator
		mybatis tools
		maven helper 

安装后重启

详细介绍这四款插件
链接: https://blog.csdn.net/yangshijin1988/article/details/63258960/.

2、创建maven工程

第一步:

在这里插入图片描述
第二步:

这里有个快捷功能:鼠标移到上面打出web,再按 Ctrl+下键,就能根据你打的单词搜索。

在这里插入图片描述

在这里插入图片描述
这里要键一个链接,从本地到包

 archetypeCatelog
 internal

在这里插入图片描述
就后点击确定完成。

看图解说:

点击main,右击new,创建两个Directory文件,java和resources,
在向如图中标记,然后再resources下创建下面四个文件

在这里插入图片描述

3、导入相关pom依赖和

Pom.xml依赖

	<properties>
	        <maven.compiler.source>1.8</maven.compiler.source>
	        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

	
	    <dependencies>
	        <!-- ********************** junit单元测试依赖 ********************** -->
	        <dependency>
	            <groupId>junit</groupId>
	            <artifactId>junit</artifactId>
	            <version>4.12</version>
	            <scope>test</scope>
	        </dependency>
	
	        <!-- ********************** Java Servlet API  ********************** -->
	        <dependency>
	            <groupId>javax.servlet</groupId>
	            <artifactId>javax.servlet-api</artifactId>
	            <version>4.0.0</version>
	            <scope>provided</scope>
	        </dependency>
	
	        <!-- ********************** Mybatis依赖 ********************** -->
	        <dependency>
	            <groupId>org.mybatis</groupId>
	            <artifactId>mybatis</artifactId>
	            <version>3.4.5</version>
	        </dependency>
	
	        <!-- ********************** Mysql JDBC驱动 ********************** -->
	        <dependency>
	            <groupId>mysql</groupId>
	            <artifactId>mysql-connector-java</artifactId>
	            <version>5.1.44</version>
	        </dependency>
	
	        <!-- **********************  日志配置  ********************** -->
	        <!--记得修改mybatis.cfg.xml添加如下内容-->
	        <!--<setting name="logImpl" value="LOG4J2"/>-->
	        <!--核心log4j2jar包-->
	        <dependency>
	            <groupId>org.apache.logging.log4j</groupId>
	            <artifactId>log4j-core</artifactId>
	            <version>2.9.1</version>
	        </dependency>
	        <dependency>
	            <groupId>org.apache.logging.log4j</groupId>
	            <artifactId>log4j-api</artifactId>
	            <version>2.9.1</version>
	        </dependency>
	        <!--web工程需要包含log4j-web,非web工程不需要-->
	        <dependency>
	            <groupId>org.apache.logging.log4j</groupId>
	            <artifactId>log4j-web</artifactId>
	            <version>2.9.1</version>
	        </dependency>
	</dependencies>
	
	
	 <build>
	        <resources>
	            <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
	            <resource>
	                <directory>src/main/java</directory>
	                <includes>
	                    <include>**/*.xml</include>
	                </includes>
	            </resource>
	            <!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题-->
	            <resource>
	                <directory>src/main/resources</directory>
	                <includes>
	                    <include>jdbc.properties</include>
	                    <include>*.xml</include>
	                </includes>
	            </resource>
	        </resources>
	
	        <plugins>
	            <plugin>
	                <groupId>org.mybatis.generator</groupId>
	                <artifactId>mybatis-generator-maven-plugin</artifactId>
	                <version>1.3.2</version>
	                <dependencies>
	                    <!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 -->
	                    <dependency>
	                        <groupId>mysql</groupId>
	                        <artifactId>mysql-connector-java</artifactId>
	                        <version>5.1.44</version>
	                    </dependency>
	                </dependencies>
	                <configuration>
	                    <overwrite>true</overwrite>
	                </configuration>
	            </plugin>
	        </plugins>
	
	    </build>

4 修改web.xml

Web.xml

	<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	
	     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	
	     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	
	     version="3.1"></web-app>

5.创建Jdbc.properties文件

Jdbc.properties

	jdbc.driver=com.mysql.jdbc.Driver
	jdbc.url=jdbc:mysql://localhost:3306/mybatis_ssm(库名)?useUnicode=true&characterEncoding=UTF-8
	jdbc.username=mybatis_ssm   (mysql数据库的用户名)
	jdbc.password=xiaoli   (mysql数据库的密码)

6、Mybatis.cfg.xml配置

mybatis.cfg.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"/>
					
					    <settings>
					        <setting name="logImpl" value="LOG4J2"/>
					    </settings>
					
					    <!-- 别名 -->
					    <typeAliases>
					        <!--<typeAlias type="com.javaxl.model.Book" alias="Book"/>-->
					    </typeAliases>
					
					
					    <!-- 配置mybatis运行环境 -->
					    <environments default="development">
					        <environment id="development">
					            <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
					            <transactionManager type="jdbc"/>
					
					            <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
					            <!-- POOLED 表示支持JDBC数据源连接池 -->
					            <!-- UNPOOLED 表示不支持数据源连接池 -->
					            <!-- JNDI 表示支持外部数据源连接池 -->
					            <dataSource type="POOLED">
					                <property name="driver"
					                          value="${jdbc.driver}"/>
					                <property name="url"
					                          value="${jdbc.url}"/>
					                <property name="username" value="${jdbc.username}"/>
					                <property name="password" value="${jdbc.password}"/>
					            </dataSource>
					        </environment>
					    </environments>
					
					    <mappers>
					        <mapper resource="com/javaxl/mapper/BookMapper.xml"/>
					    </mappers>
					</configuration>

配置log4j2.xml

log4j2.xml

	<?xml version="1.0" encoding="UTF-8"?>
	
	<!-- status : 指定log4j本身的打印日志的级别.ALL< Trace < DEBUG < INFO < WARN < ERROR 
		< FATAL < OFF。 monitorInterval : 用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s. -->
	<Configuration status="WARN" monitorInterval="30">
		<Properties>
			<!-- 配置日志文件输出目录 ${sys:user.home} -->
			<Property name="LOG_HOME">/root/workspace/lucenedemo/logs</Property>
			<property name="ERROR_LOG_FILE_NAME">/root/workspace/lucenedemo/logs/error</property>
			<property name="WARN_LOG_FILE_NAME">/root/workspace/lucenedemo/logs/warn</property>
			<property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} - %msg%n</property>
		</Properties>
	
		<Appenders>
			<!--这个输出控制台的配置 -->
			<Console name="Console" target="SYSTEM_OUT">
				<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
				<ThresholdFilter level="trace" onMatch="ACCEPT"
					onMismatch="DENY" />
				<!-- 输出日志的格式 -->
				<!-- %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间 %p : 日志输出格式 %c : logger的名称 
					%m : 日志内容,即 logger.info("message") %n : 换行符 %C : Java类名 %L : 日志输出所在行数 %M 
					: 日志输出所在方法名 hostName : 本地机器名 hostAddress : 本地ip地址 -->
				<PatternLayout pattern="${PATTERN}" />
			</Console>
	
			<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用 -->
			<!--append为TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true -->
			<File name="log" fileName="logs/test.log" append="false">
				<PatternLayout
					pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
			</File>
			<!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size, 则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
			<RollingFile name="RollingFileInfo" fileName="${LOG_HOME}/info.log"
				filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
				<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
				<ThresholdFilter level="info" onMatch="ACCEPT"
					onMismatch="DENY" />
				<PatternLayout
					pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
				<Policies>
					<!-- 基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。 modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am. -->
					<!-- 关键点在于 filePattern后的日期格式,以及TimeBasedTriggeringPolicy的interval, 日期格式精确到哪一位,interval也精确到哪一个单位 -->
					<!-- log4j2的按天分日志文件 : info-%d{yyyy-MM-dd}-%i.log -->
					<TimeBasedTriggeringPolicy interval="1"
						modulate="true" />
					<!-- SizeBasedTriggeringPolicy:Policies子节点, 基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小. -->
					<!-- <SizeBasedTriggeringPolicy size="2 kB" /> -->
				</Policies>
			</RollingFile>
	
			<RollingFile name="RollingFileWarn" fileName="${WARN_LOG_FILE_NAME}/warn.log"
				filePattern="${WARN_LOG_FILE_NAME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
				<ThresholdFilter level="warn" onMatch="ACCEPT"
					onMismatch="DENY" />
				<PatternLayout
					pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
				<Policies>
					<TimeBasedTriggeringPolicy />
					<SizeBasedTriggeringPolicy size="2 kB" />
				</Policies>
				<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
				<DefaultRolloverStrategy max="20" />
			</RollingFile>
	
			<RollingFile name="RollingFileError" fileName="${ERROR_LOG_FILE_NAME}/error.log"
				filePattern="${ERROR_LOG_FILE_NAME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd-HH-mm}-%i.log">
				<ThresholdFilter level="error" onMatch="ACCEPT"
					onMismatch="DENY" />
				<PatternLayout
					pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
				<Policies>
					<!-- log4j2的按分钟 分日志文件 : warn-%d{yyyy-MM-dd-HH-mm}-%i.log -->
					<TimeBasedTriggeringPolicy interval="1"
						modulate="true" />
					<!-- <SizeBasedTriggeringPolicy size="10 MB" /> -->
				</Policies>
			</RollingFile>
	
		</Appenders>
	
		<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
		<Loggers>
			<!--过滤掉spring和mybatis的一些无用的DEBUG信息 -->
			<logger name="org.springframework" level="INFO"></logger>
			<logger name="org.mybatis" level="INFO"></logger>
	
			<!-- 第三方日志系统 -->
			<logger name="org.springframework" level="ERROR" />
			<logger name="org.hibernate" level="ERROR" />
			<logger name="org.apache.struts2" level="ERROR" />
			<logger name="com.opensymphony.xwork2" level="ERROR" />
			<logger name="org.jboss" level="ERROR" />
	
	
			<!-- 配置日志的根节点 -->
			<root level="all">
				<appender-ref ref="Console" />
				<appender-ref ref="RollingFileInfo" />
				<appender-ref ref="RollingFileWarn" />
				<appender-ref ref="RollingFileError" />
			</root>
	
		</Loggers>
	
	</Configuration>

基于ssm逆向工程的使用

1、安装Mybatis generator插件

这一步在上面已完成,

2、配置generatorConfig.xml

generatorConfig.xml

	<?xml version="1.0" encoding="UTF-8" ?>
	<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
	        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
	<generatorConfiguration>
	    <!-- 引入配置文件 -->
	    <properties resource="jdbc.properties"/>
	
	    <!--指定数据库jdbc驱动jar包的位置-->
	    <classPathEntry location="D:\\initPath\\mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/>
	
	    <!-- 一个数据库一个context -->
	    <context id="infoGuardian">
	        <!-- 注释 -->
	        <commentGenerator>
	            <property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
	            <property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳 -->
	        </commentGenerator>
	
	        <!-- jdbc连接 -->
	        <jdbcConnection driverClass="${jdbc.driver}"
	                        connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
	
	        <!-- 类型转换 -->
	        <javaTypeResolver>
	            <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
	            <property name="forceBigDecimals" value="false"/>
	        </javaTypeResolver>
	
	        <!-- 01 指定javaBean生成的位置 -->
	        <!-- targetPackage:指定生成的model生成所在的包名 -->
	        <!-- targetProject:指定在该项目下所在的路径  -->
	        <javaModelGenerator targetPackage="com.javaxl.model"
	                            targetProject="src/main/java">
	            <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
	            <property name="enableSubPackages" value="false"/>
	            <!-- 是否对model添加构造函数 -->
	            <property name="constructorBased" value="true"/>
	            <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
	            <property name="trimStrings" value="false"/>
	            <!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法 -->
	            <property name="immutable" value="false"/>
	        </javaModelGenerator>
	
	        <!-- 02 指定sql映射文件生成的位置 -->
	        <sqlMapGenerator targetPackage="com.javaxl.mapper"
	                         targetProject="src/main/java">
	            <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
	            <property name="enableSubPackages" value="false"/>
	        </sqlMapGenerator>
	
	        <!-- 03 生成XxxMapper接口 -->
	        <!-- type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象 -->
	        <!-- type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 -->
	        <!-- type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 -->
	        <javaClientGenerator targetPackage="com.javaxl.mapper"
	                             targetProject="src/main/java" type="XMLMAPPER">
	            <!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
	            <property name="enableSubPackages" value="false"/>
	        </javaClientGenerator>
	
	        <!-- 配置表信息 -->
	        <!-- schema即为数据库名 -->
	        <!-- tableName为对应的数据库表 -->
	        <!-- domainObjectName是要生成的实体类 -->
	        <!-- enable*ByExample是否生成 example类 -->
	        <!--<table schema="" tableName="t_book" domainObjectName="Book"-->
	               <!--enableCountByExample="false" enableDeleteByExample="false"-->
	               <!--enableSelectByExample="false" enableUpdateByExample="false">-->
	            <!--&lt;!&ndash; 忽略列,不生成bean 字段 &ndash;&gt;-->
	            <!--&lt;!&ndash; <ignoreColumn column="FRED" /> &ndash;&gt;-->
	            <!--&lt;!&ndash; 指定列的java数据类型 &ndash;&gt;-->
	            <!--&lt;!&ndash; <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> &ndash;&gt;-->
	        <!--</table>-->
	
	        <table schema="" tableName="t_mvc_Book" domainObjectName="Book"
	               enableCountByExample="false" enableDeleteByExample="false"
	               enableSelectByExample="false" enableUpdateByExample="false">
	            <!-- 忽略列,不生成bean 字段 -->
	            <!-- <ignoreColumn column="FRED" /> -->
	            <!-- 指定列的java数据类型 -->
	            <!-- <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> -->
	        </table>
	
	    </context>
	</generatorConfiguration>

3、配置maven运行generator命令

按照图配置即可

在这里插入图片描述
在这里插入图片描述

	mybatis-generator:
	mybatis-generator:generate -e

在这里插入图片描述

配置完成后

在这里插入图片描述

报错

generatorConfig.xml文件下的

<classPathEntry location="D:\repository\mvn-repository\mysql\mysql-connector-java\5.1.44\mysql-connector-java-5.1.44.jar"/>

这里必须时你的maven库里的的路径。

测试

在这里插入图片描述

SessionUtil

	package com.javaxl.util;
	
	import org.apache.ibatis.session.SqlSession;
	import org.apache.ibatis.session.SqlSessionFactory;
	import org.apache.ibatis.session.SqlSessionFactoryBuilder;
	

	public class SessionUtil {
	    private static SqlSessionFactory sessionFactory;
	    private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
	    static {
	        sessionFactory = new SqlSessionFactoryBuilder().build(SessionUtil.class.getResourceAsStream("/mybatis.cfg.xml"));
	    }
	
	    public static SqlSession openSession() {
	        SqlSession session = threadLocal.get();
	        if (null == session) {
	            session = sessionFactory.openSession();
	            threadLocal.set(session);
	        }
	        return session;
	    }
	
	    public static void main(String[] args) {
	        SqlSession session = openSession();
	        System.out.println(session.getConnection());
	        session.close();
	//        System.out.println(session.getConnection());
	    }
	}

创建一个service下创Impl下创BookServiceImpl

BookServiceImpl

	package com.liyingdong.service.impl;
	
	import com.liyingdong.mapper.BookMapper;
	import com.liyingdong.model.Book;
	import com.liyingdong.service.BookService;
	

	public class BookServiceImpl implements BookService {
	
	    private BookMapper  bookMapper;
	
	    public BookMapper getBookMapper() {
	        return bookMapper;
	    }
	
	    public void setBookMapper(BookMapper bookMapper) {
	        this.bookMapper = bookMapper;
	    }
	
	    @Override
	    public int deleteByPrimaryKey(Integer bid) {
	        return bookMapper.deleteByPrimaryKey(bid);
	    }
	
	    @Override
	    public int insert(Book record) {
	        return bookMapper.insert(record);
	    }
	
	    @Override
	    public int insertSelective(Book record) {
	        return bookMapper.insertSelective(record);
	    }
	
	    @Override
	    public Book selectByPrimaryKey(Integer bid) {
	        return bookMapper.selectByPrimaryKey(bid);
	    }
	
	    @Override
	    public int updateByPrimaryKeySelective(Book record) {
	        return bookMapper.updateByPrimaryKeySelective(record);
	    }
	
	    @Override
	    public int updateByPrimaryKey(Book record) {
	        return bookMapper.updateByPrimaryKey(record);
	    }
	}

继承接口,用于测试

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
BookServiceTest

		package com.javaxl.service;
		
		import com.javaxl.mapper.BookMapper;
		import com.javaxl.model.Book;
		import com.javaxl.service.impl.BookServiceImpl;
		import com.javaxl.util.SessionUtil;
		import org.apache.ibatis.session.SqlSession;
		import org.junit.After;
		import org.junit.Before;
		import org.junit.Test;
		
		import static org.junit.Assert.*;
		
		/**
		 * @author 邦无敌
		 * @site https://blog.csdn.net/YoonBongChi
		 * @compsny 邦无敌公司
		 * @create 2020-10-15-18:18
		 */
		public class BookServiceTest {
		
		    private BookService bookService;
		    private SqlSession sqlSession;
		
		   @Before
		   public void  setUp(){
		       BookServiceImpl bookService=new BookServiceImpl();
		        sqlSession=SessionUtil.openSession();
		        BookMapper mapper = sqlSession.getMapper(BookMapper.class);
		        bookService.setBookMapper(mapper);
		        this.bookService=bookService;
		   }
		
		
		
		    @Test
		    public void insert() {
		        Book  book=new Book();
		        book.setBid(6);
		        book.setBname("录");
		        book.setBsex("njuki");
		        System.out.println(book);
		        bookService.insert(book);
		    }
		
		    @Test
		    public void selectByPrimaryKey() {
		       bookService.deleteByPrimaryKey(2);
		    }
		
		    @After
		    public  void tearDown() throws Exception{
		       sqlSession.commit();
		       sqlSession.close();
		    }
		
		
		
		}

成功
在这里插入图片描述
报错:

有俩种

一个是mysql 的编码格式错误解决方法:

	a.先查看库、表、表字符字段的编码格式
	
	SHOW CREATE DATABASE t_mbv; //查看库的字符集
	SHOW CREATE TABLE t_mbv;//查看表的字符集
	SHOW FULL COLUMNS FROM t_mbv; //查看字段编码
	
	b.修改库、表、字符字段的编码
	
	ALTER DATABASE t_mbv DEFAULT CHARACTER SET utf8; //修改库的字符集
	ALTER TABLE t_mbv CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; //修改表以及字符字段的字符集

一种时useSSL有误
解决方案:

修改mybatis.cfg.xml文件,将其改为一下形式,由于在jdbc.properties中不可修改,只能在xml中写死。

	<dataSource type="POOLED">
	                <property name="driver"
	                          value="com.mysql.jdbc.Driver"/>
	                <property name="url"
	                          value="jdbc:mysql://localhost:3306/mysql?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false"/>
	                <property name="username" value="root"/>
	                <property name="password" value="123"/>
	            </dataSource>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值