معماری بهار سری 5. نمایش ادغام Mybatis

مقدمه
Mybatis یک چارچوب پایداری محبوب است که روشی انعطاف پذیر برای نقشه برداری اظهارات SQL به اشیاء جاوا فراهم می کند. در این مقاله ، من چگونگی پیاده سازی ادغام MyBatis را در چارچوب مانند Aspring ، پایه گذاری می کنم ، پایه و اساس اجرای پروژه Minispring من است.
اجزای اصلی
ادغام Mybatis از چندین مؤلفه اصلی تشکیل شده است:
src/com/yaruyng/batis/
├── DefaultSqlSessionFactory.java
├── DefaultSqlSession.java
├── SqlSessionFactory.java
├── SqlSession.java
└── MapperNode.java
اجرای SQLSessionFective
در SQLSessionFective نقطه ورود برای ایجاد است شفاهی مثال:
public class DefaultSqlSessionFactory implements SqlSessionFactory {
@Autowired
JdbcTemplate jdbcTemplate;
String mapperLocations;
Map<String, MapperNode> mapperNodeMap = new HashMap<>();
public void init() {
scanLocation(this.mapperLocations);
// Initialize mapper nodes
}
@Override
public SqlSession openSession() {
SqlSession newSqlSession = new DefaultSqlSession();
newSqlSession.setJdbcTemplate(jdbcTemplate);
newSqlSession.setSqlSessionFactory(this);
return newSqlSession;
}
}
ویژگی های کلیدی:
- ادغام با ظرف IOC بهار
- اسکن پرونده XML Mapper
- مدیریت جلسه
تجزیه XML MAPPER
Framework Files Mybatis Mapper XML:
private Map<String, MapperNode> buildMapperNodes(String filePath) {
SAXReader saxReader = new SAXReader();
URL xmlPath = this.getClass().getClassLoader().getResource(filePath);
try {
Document document = saxReader.read(xmlPath);
Element rootElement = document.getRootElement();
String namespace = rootElement.attributeValue("namespace");
Iterator<Element> nodes = rootElement.elementIterator();
while (nodes.hasNext()) {
Element node = nodes.next();
String id = node.attributeValue("id");
String parameterType = node.attributeValue("parameterType");
String resultType = node.attributeValue("resultType");
String sql = node.getText();
MapperNode selectnode = new MapperNode();
selectnode.setNamespace(namespace);
selectnode.setId(id);
selectnode.setParameterType(parameterType);
selectnode.setResultType(resultType);
selectnode.setSql(sql);
selectnode.setParameter("");
this.mapperNodeMap.put(namespace + "." + id, selectnode);
}
} catch (Exception ex) {
ex.printStackTrace();
}
return this.mapperNodeMap;
}
این اجرای:
- از dom4j برای تجزیه XML استفاده می کند
- بیانیه های SQL و ابرداده را استخراج می کند
- اشیاء mappernode را ایجاد می کند
ساختار کد
در کدگذاری کلاس یک عبارت SQL را نشان می دهد:
public class MapperNode {
String namespace;
String id;
String parameterType;
String resultType;
String sql;
String parameter;
// Getters and setters
}
ویژگی ها:
- فضای نام و شناسه برای شناسایی منحصر به فرد
- پارامتر و اطلاعات نوع نتیجه
- ذخیره سازی بیانیه SQL
- پشتیبانی نقشه برداری پارامتر
اجرای SQLSESSION
در پیش فرض اعدام SQL را کنترل می کند:
public class DefaultSqlSession implements SqlSession {
JdbcTemplate jdbcTemplate;
SqlSessionFactory sqlSessionFactory;
@Override
public Object selectOne(String sqlid, Object[] args,
PreparedStatementCallBack pstmtcallback) {
String sql = this.sqlSessionFactory.getMapperNode(sqlid).getSql();
return jdbcTemplate.query(sql, args, pstmtcallback);
}
}
جنبه های کلیدی:
- بازیابی بیانیه SQL
- پارامتر اتصال
- نقشه برداری نتیجه
- ادغام الگوی JDBC
ادغام با IOC بهار:
ادغام Mybatis ظرف IOC بهار را افزایش می دهد:
@Autowired
JdbcTemplate jdbcTemplate;
مزایا:
- تزریق وابستگی خودکار
- مدیریت معامله
- ترکیب اتصال
- مدیریت منابع
پیکربندی XML
به عنوان مثال پیکربندی XML MAPPER:
namespace="com.example.UserMapper">
مثال استفاده
در اینجا نحوه استفاده از ادغام MyBatis آورده شده است:
@Repository
public class UserDao {
@Autowired
private SqlSessionFactory sqlSessionFactory;
public User findById(Integer id) {
SqlSession session = sqlSessionFactory.openSession();
try {
return (User) session.selectOne(
"com.example.UserMapper.findById",
new Object[]{id},
new UserRowMapper()
);
} finally {
session.close();
}
}
}
ویژگی های کلیدی
-
پشتیبانی XML MAPPER
- پیکربندی SQL مبتنی بر XML
- پشتیبانی پویا SQL
- نقشه برداری پارامتری
-
مدیریت جلسه
- انتقال اتصال
- مرزهای معامله
- پاکسازی منابع
-
نقشه برداری نتیجه
- نقشه برداری شیء
- نوع تبدیل
- جمع آوری
-
ادغام بهار
- پشتیبانی کانتینر IOC
- مدیریت معامله
- مدیریت منابع
جزئیات اجرای
- اسکن نقشه
private void scanLocation(String location) {
String sLocation = this.getClass().getClassLoader()
.getResource("").getPath() + location;
File dir = new File(sLocation);
for (File file : dir.listFiles()) {
if (file.isDirectory()) {
scanLocation(location + "https://dev.to/" + file.getName());
} else {
buildMapperNodes(location + "https://dev.to/" + file.getName());
}
}
}
- اعدام SQL
public Object selectOne(String sqlid, Object[] args,
PreparedStatementCallBack pstmtcallback) {
String sql = this.sqlSessionFactory.getMapperNode(sqlid).getSql();
return jdbcTemplate.query(sql, args, pstmtcallback);
}
بهترین تمرین
-
مدیریت منابع
- پاکسازی مناسب جلسه
- ترکیب اتصال
- مرزهای معامله
-
رسیدگی به خطا
- رسیدگی به استثناء SQL
- پاکسازی منابع در نهایت بلوک ها
- انتشار خطای مناسب
-
بهینه سازی عملکرد
- ذخیره سازی بیانیه
- ترکیب اتصال
- پشتیبانی پردازش دسته ای
چالش ها و راه حل های مشترک
-
مدیریت اتصال
- از استخر اتصال استفاده کنید
- پاکسازی مناسب را اجرا کنید
- مرزهای معامله را اداره کنید
-
نقشه برداری SQL
- پارامتر مناسب اتصال
- تبدیل نوع نتیجه
- دست زدن به مجموعه
-
مدیریت معامله
- ادغام معامله بهار
- سطح انزوا مناسب
- دست زدن به
پایان
اجرای ادغام MyBatis در یک چارچوب بهاری مانند:
- جدایی نگرانی ها
- نقشه برداری انعطاف پذیر SQL
- مدیریت معامله
- منبع بهینه سازی منابع:
- درک مفاهیم اصلی mybatis
- الگوهای ادغام بهار
- مدیریت منابع
- ملاحظات عملکرد
این پیاده سازی نشان می دهد که چگونه می توان ضمن حفظ سادگی و انعطاف پذیری ، یک ادغام چارچوب قوی ORM را ایجاد کرد.