购物网站如何建设余姚网络公司哪家好

当前位置: 首页 > news >正文

购物网站如何建设,余姚网络公司哪家好,哪里有零基础网站建设教学,智能建站做网站好吗前面我们介绍了Mybatis动态SQL的使用#xff1b;本篇我们介绍使用mybatis- freemarker动态语言生成动态SQL。 如果您对Mybatis动态SQL不太了解#xff0c;建议您先进行了解后再阅读本篇#xff0c;可以参考#xff1a; Mybatis 动态SQL – 使用if,where标签动态生成条件语…前面我们介绍了Mybatis动态SQL的使用本篇我们介绍使用mybatis- freemarker动态语言生成动态SQL。 如果您对Mybatis动态SQL不太了解建议您先进行了解后再阅读本篇可以参考 Mybatis 动态SQL – 使用if,where标签动态生成条件语句 Mybatis 动态SQL – 使用if,set标签动态生成更新语句 Mybatis 动态SQL – 使用choose标签动态生成条件语句 Mybatis 动态SQL – 使用choose标签动态生成更新语句 Mybatis 动态SQL – 使用trim标签替代where,set标签 Mybatis 动态SQL - 使用foreach标签查询数据、批量新增、批量修改、删除数据 一、数据准备 这里我们直接使用脚本初始化数据库中的数据 – 如果数据库不存在则创建数据库 CREATE DATABASE IF NOT EXISTS demo DEFAULT CHARSET utf8; – 切换数据库 USE demo; – 创建用户表 CREATE TABLE IF NOT EXISTS T_TEACHER(ID INT PRIMARY KEY COMMENT 教师编号,TEACHER_NAME VARCHAR(64) NOT NULL COMMENT 教师名称,DEPARTMENT VARCHAR(16) NOT NULL COMMENT 所属部门,BIRTH DATE NOT NULL COMMENT 出生年月,DEGREE VARCHAR(16) NOT NULL COMMENT 学历(ZK:专科, BK:本科, YJS:研究生, BS:博士) ); – 插入用户数据 INSERT INTO T_TEACHER(ID, TEACHER_NAME, DEPARTMENT, BIRTH, DEGREE) VALUES(1, 张三1, 001, 1990-06-12, BK),(2, 李四1, 002, 1992-05-10, BK),(3, 张三2, 003, 1988-01-15, YJS),(4, 李四2, 001, 1979-03-10, BK),(5, 李四3, 003, 1995-08-16, YJS);创建了一个名称为demo的数据库并在库里创建了名称为T_TEACHER的教师表并向表中插入了数据 二、环境准备 1、添加依赖 dependencygroupIdorg.mybatis.scripting/groupIdartifactIdmybatis-freemarker/artifactIdversion1.2.4/version /dependency2、创建实体类 在cn.horse.demo下创建TeacherInfo、TeacherInfoQuery实体类 TeacherInfo类 package cn.horse.demo;import java.time.LocalDate;public class TeacherInfo {private Integer id;private String name;private String department;private LocalDate birth;private String degree;public void setId(Integer id) {this.id id;}public Integer getId() {return id;}public void setName(String name) {this.name name;}public String getName() {return name;}public void setDepartment(String department) {this.department department;}public String getDepartment() {return department;}public void setBirth(LocalDate birth) {this.birth birth;}public LocalDate getBirth() {return birth;}public void setDegree(String degree) {this.degree degree;}public String getDegree() {return degree;}Overridepublic String toString() {StringBuilder stringBuilder new StringBuilder();stringBuilder.append({ );stringBuilder.append(id: );stringBuilder.append(this.id);stringBuilder.append(, );stringBuilder.append(name: );stringBuilder.append(this.name);stringBuilder.append(, );stringBuilder.append(department: );stringBuilder.append(this.department);stringBuilder.append(, );stringBuilder.append(birth: );stringBuilder.append(this.birth);stringBuilder.append(, );stringBuilder.append(degree: );stringBuilder.append(this.degree);stringBuilder.append( });return stringBuilder.toString();} }TeacherInfoQuery类 package cn.horse.demo;public class TeacherInfoQuery {private String department;private String degree;public void setDepartment(String department) {this.department department;}public String getDepartment() {return department;}public void setDegree(String degree) {this.degree degree;}public String getDegree() {return degree;} }3、Mapper配置文件 在resources的目录下新建TeacherInfoMapper.xml配置文件 ?xml version1.0 encodingUTF-8 ? !DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttps://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecn.horse.demo.TeacherInfoMapper/mapper4、动态语言配置 在resources下新建mybatis-config.xml配置文件配置freemarker默认的脚本语言并引入TeacherInfoMapper.xml配置文件 ?xml version1.0 encodingUTF-8 ? !DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd configurationsettingssetting namelogImpl valueJDK_LOGGING/setting namedefaultScriptingLanguage valueorg.mybatis.scripting.freemarker.FreeMarkerLanguageDriver//settingsenvironments defaultdevelopmentenvironment iddevelopmenttransactionManager typeJDBC/dataSource typePOOLEDproperty namedriver valueorg.gjt.mm.mysql.Driver/property nameurl valuejdbc:mysql://localhost:3306/demo?useUnicodetrueamp;useSSLfalseamp;characterEncodingutf8/property nameusername valueroot/property namepassword valuehorse//dataSource/environment/environmentsmappersmapper resourcedemo/TeacherInfoMapper.xml //mappers /configuration其中setting namedefaultScriptingLanguage valueorg.mybatis.scripting.freemarker.FreeMarkerLanguageDriver/用于配置freemarker作为默认的动态语言 5、日志配置 在resources的目录下新建logging.properties配置文件 handlersjava.util.logging.ConsoleHandler .levelINFOcn.horse.demo.TeacherInfoMapper.levelFINER java.util.logging.ConsoleHandler.levelALL java.util.logging.ConsoleHandler.formatterjava.util.logging.SimpleFormatter java.util.logging.SimpleFormatter.format%1\(tY-%1\)tm-%1\(td %1\)tT.%1\(tL %4\)s %3\(s - %5\)s%6$s%n在cn.horse.demo下新建JdkLogConfig类 JdkLogConfig类 package cn.horse.demo;import java.io.IOException; import java.io.InputStream; import java.util.logging.LogManager;public class JdkLogConfig {public JdkLogConfig() {try {InputStream inputStream ClassLoader.getSystemClassLoader().getResourceAsStream(logging.properties);LogManager.getLogManager().readConfiguration(inputStream);} catch (IOException e) {throw new RuntimeException(e);}} }6、会话工具类 在cn.horse.demo包下新建SqlSessionUtils工具类 package cn.horse.demo;import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream; import java.util.Objects;public class SqlSessionUtils {private static final SqlSessionFactory sqlSessionFactory;static {// 读取mybatis配置文件InputStream inputStream ClassLoader.getSystemClassLoader().getResourceAsStream(mybatis-config.xml);// 根据配置创建SqlSession工厂sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);}/*** 开启会话* return/public static SqlSession openSession() {return sqlSessionFactory.openSession();}/** 关闭会话* param sqlSession*/public static void closeSession(SqlSession sqlSession) {if(Objects.nonNull(sqlSession)) {sqlSession.close();}} }7、启动程序配置 package cn.horse.demo;import org.apache.ibatis.session.SqlSession;import java.util.List;public class Main {public static void main(String[] args) {// 引入JDK日志配置System.setProperty(java.util.logging.config.class, cn.horse.demo.JdkLogConfig);}private static void find(String statement, TeacherInfoQuery query) {SqlSession sqlSession null;try {sqlSession SqlSessionUtils.openSession();ListTeacherInfo teacherInfoList sqlSession.selectList(statement, query);for (TeacherInfo teacherInfo: teacherInfoList) {System.out.println(teacherInfo);}} finally {SqlSessionUtils.closeSession(sqlSession);}}private static void insert(String statement, ListTeacherInfo teacherInfoList) {SqlSession sqlSession null;try {sqlSession SqlSessionUtils.openSession();sqlSession.insert(statement, teacherInfoList);sqlSession.commit();} finally {SqlSessionUtils.closeSession(sqlSession);}}private static void update(String statement, TeacherInfo teacherInfo) {SqlSession sqlSession null;try {sqlSession SqlSessionUtils.openSession();sqlSession.update(statement, teacherInfo);sqlSession.commit();} finally {SqlSessionUtils.closeSession(sqlSession);}}private static void delete(String statement, ListInteger idList) {SqlSession sqlSession null;try {sqlSession SqlSessionUtils.openSession();sqlSession.delete(statement, idList);sqlSession.commit();} finally {SqlSessionUtils.closeSession(sqlSession);}} }三、查询数据 在TeacherInfoMapper.xml配置文件中新增findByQuery查询语句 select idfind resultTypecn.horse.demo.TeacherInfoSELECTID,TEACHER_NAME name,DEPARTMENT,BIRTH,DEGREEFROM T_TEACHERWHERE 1 1![CDATA[#if degree?? ! degreeAND DEGREE p namedegree//#if#if department?? ! departmentAND DEPARTMENT p namedepartment//#if]] /select#if类似于if标签第一个标签代表的是degree不为null并且不为空字符串第二个标签代表的是department不为null并且不为空字符串 测试 // 引入JDK日志配置 System.setProperty(java.util.logging.config.class, cn.horse.demo.JdkLogConfig);// 查询学历为本科的教师 TeacherInfoQuery query new TeacherInfoQuery(); query.setDegree(BK); find(cn.horse.demo.TeacherInfoMapper.find, query);执行后的结果如下 四、批量插入数据 在TeacherInfoMapper.xml配置文件中新增insert插入语句 insert idinsertINSERT INTO T_TEACHER(ID, TEACHER_NAME, DEPARTMENT, BIRTH, DEGREE)VALUES![CDATA[#list list as teacherInfo(p valueteacherInfo.id/,p valueteacherInfo.name/,p valueteacherInfo.department/,p valueteacherInfo.birth/,p valueteacherInfo.degree/)#if teacherInfo_has_next,/#if/#list]] /insert测试
// 引入JDK日志配置 System.setProperty(java.util.logging.config.class, cn.horse.demo.JdkLogConfig);ListTeacherInfo teacherInfoList new ArrayList(); TeacherInfo teacherInfo1 new TeacherInfo(); teacherInfo1.setId(11); teacherInfo1.setName(张三11); teacherInfo1.setDepartment(001); teacherInfo1.setBirth(LocalDate.of(1988, 5, 20)); teacherInfo1.setDegree(BK); teacherInfoList.add(teacherInfo1);TeacherInfo teacherInfo2 new TeacherInfo(); teacherInfo2.setId(12); teacherInfo2.setName(李四12); teacherInfo2.setDepartment(003); teacherInfo2.setBirth(LocalDate.of(1989, 8, 10)); teacherInfo2.setDegree(ZK); teacherInfoList.add(teacherInfo2); insert(cn.horse.demo.TeacherInfoMapper.insert, teacherInfoList);执行的结果如下 五、更新数据 在TeacherInfoMapper.xml配置文件中新增update更新语句 update idupdateUPDATE T_TEACHERSET![CDATA[ID p nameid/#if name?? ! name, TEACHER_NAME p namename//#if#if department?? ! department, DEPARTMENT p namedepartment//#if#if birth??, BIRTH p namebirth//#if#if degree?? ! degree, DEGREE p namedegree//#if]]WHERE ID ![CDATA[ p nameid/ ]] /update测试
// 引入JDK日志配置 System.setProperty(java.util.logging.config.class, cn.horse.demo.JdkLogConfig);TeacherInfo teacherInfo new TeacherInfo(); teacherInfo.setId(11); teacherInfo.setName(张三22); update(cn.horse.demo.TeacherInfoMapper.update, teacherInfo);执行的结果如下 六、批量删除数据 在TeacherInfoMapper.xml配置文件中新增delete删除语句 delete iddeleteDELETE FROM T_TEACHERWHERE ID IN (![CDATA[#list list as idp valueid/#if id_has_next,/#if/#list]]) /delete测试
// 引入JDK日志配置 System.setProperty(java.util.logging.config.class, cn.horse.demo.JdkLogConfig);delete(cn.horse.demo.TeacherInfoMapper.delete, Arrays.asList(11, 12));执行的结果如下